암묵 프로그래밍

Tacit programming

암묵적 프로그래밍은 점 없는 스타일이라고도 불리는데, 함수 정의가 작용하는 인수(또는 "점")를 식별하지 않는 프로그래밍 패러다임이다.대신에 그 정의들은 단지 다른 기능들을 구성할 뿐이며, 그 중에는 주장을 조작하는 결합자들이 있다.암묵적 프로그래밍은 이론적 관심사인데, 그 이유는 구성을 엄격하게 사용하면 등가 추론에 잘 적응하는 프로그램이 되기 때문이다.[1]그것은 또한 APL과 그것의 파생어를 포함한 특정 프로그래밍 언어[2]포스 같은 결합 언어의 자연스러운 스타일이다.논점 명칭의 부족은 포인트가 없는 스타일이 불필요하게 불명확하다는 평판을 주므로 "포인트 없는 스타일"[1]이라는 별칭이 붙는다.

Unix 스크립팅파이프를 사용한 패러다임을 사용한다.

암묵적 프로그래밍의 핵심 아이디어는 적절한 추상화 수준에서 운영을 돕는 것이다.

파이톤

암묵적 프로그래밍은 다음의 파이톤 코드로 설명될 수 있다.다음과 같은 일련의 작업:

반항하다 예시(x):     y = foo(x)     z = 술집을 내다(y)     w = 야유하다(z)     돌아오다 w 

...는 매개변수 없이 일련의 함수의 구성으로서 점 없는 문체로 작성된다.[3]

로부터 펑토스 수입하다 부분적, 줄이다 반항하다 작곡하다(*양치류):     돌아오다 부분적(줄이다, 람다 v, fn: fn(v), 양치류)  예시 = 작곡하다(foo, 술집을 내다, 야유하다) 

더 복잡한 예제의 경우, Haskell 코드는p = ((.) f) . g다음과 같이 번역할 수 있다.

p = 부분적(작곡하다, 부분적(작곡하다, f), g) 

기능 프로그래밍

간단한 예(Haskell에서)는 숫자 목록의 합계를 계산하는 프로그램이다.다음과 같이 뾰족한 스타일(cf. value-level programming)을 사용하여 반복적으로 함수를 재귀적으로 정의할 수 있다.

합계를 내다 (x:xs) = x + 합계를 내다 xs 합계를 내다 [] = 0 

그러나 폴드를 사용하여 다음을 대체할 수 있다.

합계를 내다 xs = 접다 (+) 0 xs 

그리고 나서 논쟁은 필요없고, 그래서 이것은 단순하게

합계를 내다 = 접다 (+) 0 

포인트가 없는.

또 다른 예는 함수 구성을 사용한다.

p x y z = f (g x y) z 

다음의 Haskell 유사 유사 코드는 함수 정의를 무점 등가물로 줄이는 방법을 폭로한다.

p = \x -> \y -> \z -> f (g x y) z   = \x -> \y -> f (g x y)   = \x -> \y -> (f . (g x)) y   = \x -> f . (g x)   (* 여기  인픽스 작곡하다 운영자 "." 이다 사용했다 로서 a 카레로 만든 기능을 발휘하다. *)   = \x -> ((.) f) (g x)   = \x -> (((.) f) . g) x  p = ((.) f) . g 

마지막으로, 복잡한 예를 보려면 목록을 가져와서 기능을 적용한 다음 기준에 따라 요소를 필터링하는 지도 필터 프로그램을 상상해 보십시오.

mf 기준 운영자 리스트를 작성하다 = 여과하다 기준 (지도를 그리다 운영자 리스트를 작성하다) 

포인트 프리(point-free[4])로 표현할 수 있다.

mf = (. 지도를 그리다) . (.) . 여과하다 

앞에서 설명한 바와 같이 '점 없는'의 점은 점의 사용이 아니라 인수를 가리킨다는 점에 유의하십시오. 일반적인 오해.[5]

해스켈 표현식을 포인트 프리 형식으로 자동 변환하기 위한 몇 가지 프로그램이 작성되었다.

APL 계열

J에서, 번호 목록(어레이)의 평균을 계산하기 위해 만들어진 함수에서 동일한 종류의 포인트가 없는 코드가 발생한다.

탐내다=: +/ % # 

+/매핑을 통해 배열 항목의 합계(/) 합계 ()+배열로. %합을 원소의 수로 나눈다.#배열의 )

오일러의 공식은 다음과 같이 암묵적으로 표현했다.

cas =: 2 o. ] 죄를 짓다 =: 1 o. ] 오일러 =: ^@j. = cas j. 죄를 짓다 

(j.단조로운 정의를 가진 원시적 함수다.0j1times x 및 diadi 정의:x+0j1×y.) Dynalog APL로 표현된 것과 동일한 암묵적 연산:

탐내다  + ÷   cas  2   죄를 짓다  1   j    {0  +0j1×}  ⍝ 이 부분은 과묵하지 않다. 오일러  *j = cas j 죄를 짓다 

스택 기반

스택 지향 프로그래밍 언어(및 대부분의 스택 기반[citation needed] 프로그래밍 언어)에서는 점 없는 방법이 일반적으로 사용된다.예를 들어, 피보나치 숫자를 계산하는 절차는 PostScript에서 다음과 같이 보일 수 있다.

/message {    속이다 속이다 1 eq 교환하다 0 eq 또는 아닌    {       속이다 1 후보선수 섬유질하다       교환하다 2 후보선수 섬유질하다       덧셈을    } 만일 } 반항하다 

유닉스 파이프라인

Unix 스크립팅에서 기능은 표준 입력으로부터 데이터를 수신하고 결과를 표준 출력으로 전송하는 컴퓨터 프로그램이다.예를 들어,

sort uniq -c sort -rn

암묵적이거나 포인트가 없는 구성으로, 카운트 감소 순서에 따라 그 주장과 인수들의 카운트를 반환한다.'sort'와 'uniq'는 함수, '-c'와 '-rn'은 함수를 제어하지만, 그 주장은 언급되지 않는다.파이프 '는 합성 연산자다.

파이프라인의 작동 방식 때문에, 통상적으로 표준 입출력 스트림 쌍의 형태로 한 번에 하나의 「논의」를 전달할 수 있을 뿐이다.명명된 파이프에서 여분의 파일 설명자를 열 수 있지만, 이것은 더 이상 포인트가 없는 스타일을 구성하지 않는다.

참고 항목

참조

  1. ^ a b Manuel Alcino Pereira da Cunha(2005) 포인트 프리 프로그램 계산
  2. ^ W. 네빌 홈즈, 에드. (2006) 컴퓨터와 사람
  3. ^ "Name code not values". Concatenative.org. Retrieved 13 September 2013.
  4. ^ 파이퍼메일
  5. ^ "Pointfree - HaskellWiki". wiki.haskell.org. Retrieved 2016-06-05.

외부 링크