람다 미적분학에서 λx.λf.fx의 이름은 무엇입니까?
해당 함수의 기능 이름이 Haskell과 같은 기능 프로그래밍 언어로되어 있습니까?
객체 지향 프로그래밍에서, 일반적인 이름은 방법에 대한이 foo같은 인수로 함수를 소요 x.foo(f)반환 f(x)?
람다 미적분학에서 λx.λf.fx의 이름은 무엇입니까?
해당 함수의 기능 이름이 Haskell과 같은 기능 프로그래밍 언어로되어 있습니까?
객체 지향 프로그래밍에서, 일반적인 이름은 방법에 대한이 foo같은 인수로 함수를 소요 x.foo(f)반환 f(x)?
답변:
하스켈에서 \x.\f.f x이다 flip ($)로하는 $등 읽기 적용 나뿐만 읽을 것, 반대 적용 .
대략 /programming/4090168/is-there-an-inverse-of-the-haskell-operator 기반
\f.\x.\y.f y x플립은 C입니다 en.wikipedia.org/wiki/B,C,K,W_system
$이와 같이 뒤집기 위해 추가 하면 마지막 2 개만 뒤집을 2 개의 인수를 취하는 부분적으로 적용되는 함수가 필요하므로 2를 제외한 모든 것을 부분적으로 적용합니다.
(\f.\x.\y.f y x) (\f.\x.f x)줄어드는 것이 의심 스럽 (\x.\f.f x)습니까? 그렇습니다.
표준 결합기 를 사용 하여이 기능을 다음과 같이 표현할 수 있습니다
C I
어디
C f x y = (f y) x
하스켈에서는
flip id
여기 id의 유형에 전문 (a -> b) -> a -> b및 flip스왑 a -> b및 a.
SKI 미적분학으로 표현할 수도 있습니다 .
S (K (S I)) K
원래 Alonzo Church의 "람다 변환의 계산법"에서 그는이 결합자를 T로 표시 합니다.
교회 숫자의 맥락에서 exp 라고 합니다. 이 용어의 "프로그램"에 대한 교회에서 사용되는 "속기"표기 일치 N 텀에 M을 "[ M N은 ] ''(약자 NM )".
프로그래밍에서 유사한 기능에 대한 표준 이름을 아직 들어 보지 못했습니다.
이것은 때때로 thrush combinator 라고하며 Clojure에서는 thread-first macro 라고합니다 . 그것은의 주요 사용 당신은 그들이에서 실행 순서대로 체인 계산의 일련의 계산을 표현 할 수입니다. 예를 들어, 값을 복용 x함수에 전달, f다음의 결과를 전달 f(x)하는 기능으로 g,로 기록 될 것입니다 g(f(x))표준 함수 구성 사용 (또는 g (f x)암시 적 괄호로 작업중인 경우) 많은 수의 연결 함수가 실행되는 순서의 역순으로 읽어야하기 때문에 어색 할 수 있습니다. 아구창 조합기를 다음과 같이 정의하면 아구창 조합기를 사용하여이를 다르게 표현할 수 있습니다.
T x f = f x
T x f g ... = T (T x f) g ...
그런 다음식이 T x f g h됩니다 h (g (f x)).
(자세한 정보와 라켓 언어의 구체적인 구현을 원하는 사람들을 위해, 나는 라켓의 아구창 조합에 대한 블로그 게시물을 가지고 있습니다 )
귀하의 질문을 올바르게 이해하기를 희망하지만 이것이 ML 언어의 (역) 파이프 연산자라고 알려져 있습니다.
[1; 2; 3] |> List.map sq // let it = [1; 4; 9]
작업 순서를 도와주는 리버스 파이프 연산자도 있습니다.
printf "The value is.." <| 2 + 3 // let it = "The value is..5"
unpiped 형식 때문에 유용합니다
printf "The value is.." 2 + 3 ;; error
printf가 평가하려고 시도하기 때문에 오류가 발생 "The value is.." 2하고 정의 된 +연산자 가 없기 때문에 오류가 발생 합니다. 이 작업을 수행하려면 괄호를 사용하십시오.
printf "The value is.." (2 + 3) // let it = "The value is..5"
실제 사용과 관련하여 |>운영자는 F #, LiveScript 및 Elixir와 같은 ML 및 ML에서 영감을 얻은 많은 언어의 빵집과 버터를 매우 유용하게 사용할 수 있습니다. <|덜 일반적이며 일반적으로 가독성을 높일 때만 사용됩니다.