암묵 프로그래밍
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.
단조로운 정의를 가진 원시적 함수다.0j1
times 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'은 함수를 제어하지만, 그 주장은 언급되지 않는다.파이프 '는 합성 연산자다.
파이프라인의 작동 방식 때문에, 통상적으로 표준 입출력 스트림 쌍의 형태로 한 번에 하나의 「논의」를 전달할 수 있을 뿐이다.명명된 파이프에서 여분의 파일 설명자를 열 수 있지만, 이것은 더 이상 포인트가 없는 스타일을 구성하지 않는다.
참고 항목
- 결합 논리학
- 통합 프로그래밍 언어
- 기능 수준 프로그래밍
- Joy(프로그래밍 언어), 현대적이고 암묵적인 언어
참조
- ^ a b Manuel Alcino Pereira da Cunha(2005) 포인트 프리 프로그램 계산
- ^ W. 네빌 홈즈, 에드. (2006) 컴퓨터와 사람
- ^ "Name code not values". Concatenative.org. Retrieved 13 September 2013.
- ^ 파이퍼메일
- ^ "Pointfree - HaskellWiki". wiki.haskell.org. Retrieved 2016-06-05.