람다 미적분학에서 λ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에서 영감을 얻은 많은 언어의 빵집과 버터를 매우 유용하게 사용할 수 있습니다. <|
덜 일반적이며 일반적으로 가독성을 높일 때만 사용됩니다.