카레잉

Currying

수학과 컴퓨터 과학에서, 커리잉은 여러 의 인수를 취하는 함수를 각각 하나의 인수를 취하는 일련의 함수로 변환하는 기술이다.예를 들어, 3개의 인수를 사용하는 ff를 curry하면 3개의 함수가 생성됩니다.

또는 추상적으로 말하면 X에서,에서1개, Y에서 1개 두 개의 인수를 취하여 Currying에 의해출력하는 함수를 인수를 취하여Y에서 출력하는 함수로 변환하여 에서 하는 함수로 한다.Y에서로 이동합니다 { Z를 합니다.} Currying은 부분 도포와 관련이 있지만 동일하지는 않습니다

카레링은 실용적이고 이론적인 환경 모두에서 유용합니다.기능성 프로그래밍 언어 및 기타 많은 언어에서는 인수가 함수 및 예외로 전달되는 방법을 자동으로 관리하는 방법을 제공합니다.이론 컴퓨터 과학에서, 그것은 하나의 논거만을 제공하는 단순한 이론 모델에서 다중 논거로 함수를 연구하는 방법을 제공한다.카레링과 카레링의 엄격한 개념에 대한 가장 일반적인 설정은 닫힌 모노이드 범주에서, 양자역학, 코보디즘, [1]끈 이론을 포함한 많은 다른 구조와의 대응에 대한 증명과 프로그램의 광범위한 일반화의 기초가 됩니다.이것은 Gottlob [2][3]Frege에 의해 소개되었고, Moses Schönfinkel[3][4][5][6]의해 개발되었으며, Haskell [7][8]Curry에 의해 더욱 개발되었습니다.

uncurrying은 currying으로의 이중 변환으로 기능 해제의 한 형태로 볼 수 있습니다.반환값이 다른 f {\f 취하여 {\ 와 g {\ g의 인수를 파라미터로 하여 결과적으로f{\ f의 적용을 합니다.f에 이어 g를 해당 주장에 적용합니다.프로세스를 반복할 수 있습니다.

동기

Currying은 여러 인수를 사용하는 함수와 함수가 하나의 인수만 사용하는 프레임워크에서 사용할 수 있는 방법을 제공합니다.예를 들어, 일부 분석 기법은 단일 인수가 있는 함수에만 적용할 수 있습니다.실제 함수는 종종 이것보다 더 많은 인수를 사용합니다.Frege는 여러 개의 인수를 가진 함수를 단일 인수 함수의 체인으로 변환하는 것이 가능했기 때문에 단일 인수 사례에 대한 솔루션을 제공하기에 충분하다는 것을 보여주었다.이 변화는 현재 [9]카레링이라고 알려진 과정이다.일반적으로 수학적 분석이나 컴퓨터 프로그래밍에서 발생할 수 있는 모든 "일반" 함수는 큐레이션할 수 있습니다.단, 카레가 불가능한 카테고리가 있습니다.카레가 가능한 가장 일반적인 카테고리는 닫힌 모노이드 카테고리입니다.

일부 프로그래밍 언어에서는 거의 항상 큐레이션 함수를 사용하여 여러 인수를 얻습니다. 주목할 만한 예로는 ML과 Haskell있으며, 두 경우 모두 모든 함수가 정확히 하나의 인수를 가집니다.이 속성은 람다 미적분학에서 상속되며, 여기서 다중 인수 함수는 일반적으로 큐어 형태로 표시됩니다.

카레링은 부분 도포와 관련이 있지만 동일하지는 않습니다.실제로 폐쇄 프로그래밍 기술은 큐어 기능과 함께 이동하는 환경에서 인수를 숨김으로써 부분적 응용 및 일종의 커리잉을 수행하기 위해 사용할 수 있다.

일러스트

:R × {\ \ {R} \ 있다고 가정합니다.이 함수는 2개의 실수( \를 취하여 실수를 출력하며f y )로 정의됩니다.h에서 R로 함수를 출력하는 ction h(\ hR}). 에서는 \mathbb 단일 실제 인수를 사용하여 실제 출력을 생성하는 모든 함수 집합을 나타냅니다모든 x x에 대해 h ( y ) + 2 + 2 : 을 정의합니다. ) xh ( x ) =_ { x}。예를 들어 (){ h ()는 출력 + ( )h( )= 2( y ) 2 ( y ) 2( y )일반적인

정확히 동일한 정보를 전달하도록 합니다.이런 상황에서 우리는 또한

이는 인수가 3개 이상인 함수에도 적용됩니다.f{\ f 3개의 f 의 함수인 , f {\, zh {\ h 속성을 가집니다.

역사

"커리"의 "커리"는 이 개념을 널리 사용한 논리학자 하스켈 커리를 지칭하는 이지만,[10] 모세스 쇤핑클은 카레보다 6년 전에 아이디어를 얻었다.대체 명칭 "Schönfinkelisation"이 [11]제안되었습니다.수학적 맥락에서 원리는 1893년 프레게에 [2][3]의해 작동된 것으로 거슬러 올라갈 수 있다.

"currying"이라는 단어의 유래는 명확하지 않습니다.데이비드 터너는 이 단어가 크리스토퍼 스트레이시가 1967년 자신의 강의 노트 프로그래밍 언어 [12]기본 개념에서 만든 것이라고 말했지만, 이 개념은 언급되었지만,[4] "currying"이라는 단어는 노트에는 나타나지 않는다.존 C. 레이놀즈는 1972년 논문에서 "currying"을 정의했지만,[5] 이 용어를 만들었다고 주장하지는 않았다.

정의.

커리잉은 비공식적인 정의부터 시작하여 가장 쉽게 이해할 수 있으며, 그 정의는 많은 다른 영역에 맞게 형성될 수 있습니다.먼저, 몇 가지 표기법을 설정해야 합니다. (\Y) 표기법은 XX)에서Y(\ Y까지의 모든 함수를 나타냅니다.f(\f)가 이러한 함수인 F: Y(\ f XY 표기합니다.X × 쌍이 정렬된 Y를 나타냅니다. Y Y 각각 X XY{Y데카르트 곱입니다.여기서 X X Y Y 다음과 같이 세트이거나 타입이거나 다른 종류의 객체일 수 있습니다.

주어진 함수

:( × ) {\ f YZ

카레링은 새로운 기능을 구축한다

: ( ) { h \ Y \ Z)} 。

를 사용하여 함수를 반환합니다.이 함수는 다음과 같습니다.

XX})의 x({displaystyle X})와 Y({displaystyle Y의 y Y xdisplaystyle Y 입력합니다.

Uncurrying은 역변환으로, 오른쪽 로 가장 쉽게 이해할 수 있습니다 }

집합론

집합론에서 XY X X)에서 집합 Y Y까지의 함수 집합을 나타내기 위해 사용됩니다.커링은 집합B ×(\ C 스럽게 됩니다. Adisplaystyle A) 부터 C C부터 A A까지의 기능 세트

실제로, 함수 집합의 지수 표기법을 정당화하는 것은 이 자연분사입니다.커링의 모든 인스턴스와 마찬가지로 위의 공식은 인접함수의 쌍을 나타냅니다.각 고정세트 C에 대해 B×C B B C A A C에 인접해 있습니다

집합 범주에서 개체 X Y 지수 개체라고 합니다.

함수 공간

함수 해석이나 호모토피 이론과 같은 함수 공간의 이론에서는 위상 공간 사이연속적인 함수에 일반적으로 관심이 있다. 이라고 .\ {}HomHom 펑터)는 XX에서 Y(\ Y까지의 모든 함수 세트에 대해 Y 을 사용하여 연속 함수의 서브셋을 나타냅니다.여기 (* 분사입니다.

반면 uncurrying은 역맵입니다.XX)에서 Y(\ Y까지의 연속 함수 콤팩트 오픈 토폴로지가 주어지고 Y(\ Y 로컬 콤팩트 하우스도르프일 경우

동형사상입니다.이는 X X Y Y Y) 및 Y(style [13]: chapter 5 [14]Y 콤팩트하게 생성되는 에도 마찬가지이지만 케이스는 [15][16]더 많습니다.

한 가지 유용한 결론은 함수가 연속적인 경우에만 연속적이라는 것입니다.또 다른 중요한 결과는 이 맥락에서 보통 "평가"라고 불리는 애플리케이션 맵이 연속적이라는 것입니다(평가는 컴퓨터 과학에서 완전히 다른 개념이라는 에 유의하십시오).그것은,

X Y 콤팩트 오픈 이고 Y Y 로컬 콤팩트 하우스도르프일 때 [17]연속됩니다.이 두 결과는 호모토피의 연속성을 확립하는 데 중심적입니다. 즉, X X 단위 I(\ I I× ZI(는) Y표시 스타일 Y에서 Z 로의 2가지 기능의 호모토피 또는 에 상당하는 Z Y스타일 ZY의 단일(연속) 경로로 생각할 수 있습니다.

대수 위상

대수 위상에서, 커리잉 에크만-힐턴 이중성의 예로 작용하며, 다양한 다른 설정에서 중요한 역할을 한다.를 들어 루프 공간은 서스펜션이 감소하는 인접 관계에 있습니다.이것은 일반적으로 다음과 같이 기술됩니다.

여기서 { A (\A\ B호모토피 클래스 세트이며, A(\A)는 A의 서스펜션, \A)는 공간의 루프입니다.본질적으로 서스펜션 X(\X)는 단위 간격을 갖는 X X 데카르트 곱으로 볼 수 있으며, 이 간격을 루프로 변환하는 등가 관계를 모듈화한다.는 공간 분석을 실시하고 uncurryi에 다 지연 등 모두 기능의 공간에 루프에서 Z{Z\displaystyle}에 X{X\displaystyle}에서Ω Z{\displaystyle\Omega Z}로 카레로 맛을 낸 형탠 다음에는 우주 X{X\displaystyle}, 즉 .[17]그리고 카레{\displaystyle{\text{카레}}}은 수반 functor.쇼핑듀얼입니다.[17]

매핑 콘과 매핑 파이버(교정 및 교정)[13]: chapters 6,7 사이의 이중성은 커리잉의 한 형태로 이해될 수 있으며, 이는 길고 정확Puppe 시퀀스와 코엑스한 Puppe 시퀀스의 이중성으로 이어집니다.

호몰로지 대수학에서 카레링과 비커리링 사이의 관계는 텐서홈 결합으로 알려져 있다.여기서 흥미로운 반전이 발생합니다. 홈 펑터텐서 곱 펑터가 정확한 순서로 상승하지 않을 수 있습니다. 이는 Ext 펑터Tor 펑터의 정의로 이어집니다.

도메인 이론

이론, 즉 부분 순서 집합의 격자 에서격자에 Scott[18]위상이 주어질 때 연속 함수이다스콧 연속 함수는 람다 미적분에 대한 의미론을 제공하기 위해 처음 조사되었다.보다 일반적으로, Scott-continuous 함수는 현재 컴퓨터 알고리즘의 표현 의미론 연구를 포함하는 도메인 이론에서 연구되고 있다.Scott 토폴로지는 토폴로지 공간의 카테고리에서 볼 수 있는 많은 일반적인 토폴로지와는 상당히 다릅니다.Scott 토폴로지는 일반적으로 미세하고 취하지 않습니다.

연속성의 개념은 호모토피 유형 이론에서 나타나는데, 여기서 대략적으로 말하면, 두 개의 컴퓨터 프로그램은 하나의 프로그램에서 다른 프로그램으로 "연속적으로" 리팩터링될 수 있다면 동일한 결과를 계산하는 것으로 간주될 수 있다.

람다 계산

이론 컴퓨터 과학에서, 카레링은 함수가 하나의 인수만을 갖는 람다 미적분과 같은 매우 단순한 이론 모델에서 여러 개의 인수로 함수를 연구하는 방법을 제공한다.함수( { f 2개의 인수를 사용하여 유형×) \displaystyle Y Z를 갖는다고 가정합니다.이것은 x가 X(\ X를 가져야 한다는 을 의미하며, y는 Y(\를 가져야 한다는 것을 의미합니다. Zf의 큐어 형식은 다음과 같이 정의된다.

{ \}는 람다 미적분의 추상화입니다.카레는 ( \displaystyle Y Z 타입으로 기능하기 때문에 카레는 그 타입 자체가

→ 연산자는 종종 오른쪽 연관성으로 간주되므로, 커서링된 함수 X ( to Y Z 종종 ({Y\toZ로 표기됩니다. 반대로 함수 애플리케이션왼쪽 연관성)으로 간주됩니다.

( ) ) ( ) y( ( { \ { style } ( ) \ ; x ) \ ; y ) ={ displaystyle } ( ) \ ; \ ;y}

즉, 어플리케이션 순서를 명확하게 하기 위해 괄호는 필요하지 않습니다.

큐어 함수는 폐쇄를 지원하는 모든 프로그래밍 언어에서 사용할 수 있지만 대부분의 함수 호출에서 부분 적용 및 폐쇄 생성의 오버헤드를 피할 수 있기 때문에 일반적으로 효율상의 이유로 큐어되지 않은 함수가 선호됩니다.

유형 이론

유형 이론에서, 컴퓨터 과학에서 유형 체계에 대한 일반적인 생각은 특정한 유형의 대수학으로 공식화된다.예를 들어 f : {\ f X Y라고 표기하는 경우 X {\ X Y {\ Y 유형 생성자이며, 화살표 {\ 유형 생성자이며, 구체적으로는 함수 유형 또는 입니다.마찬가지로 데카르트 X ×(\ X Y 제품 유형 생성자×(\에 의해 구성됩니다.

유형 이론 접근법은 ML과 같은 프로그래밍 언어로 표현되며, 여기서 파생된 언어 및 영감을 받은 언어(CaML, Haskell 및 F#)로 표현됩니다.

유형 이론 접근법은 아래에서 논의된 범주 이론 언어에 자연스러운 보완을 제공합니다.이것은 범주, 특히 모노이드 범주가 내부 언어를 가지고 있기 때문인데, 단순 유형 람다 미적분이 그러한 언어의 가장 두드러진 예입니다.단일 유형 생성자(화살표 유형)에서 빌드할 수 있으므로 이 컨텍스트에서 중요합니다.그리고 나서 카레잉은 천연 제품 타입으로 언어를 풍부하게 한다.범주 및 유형의 객체 간 대응은 프로그래밍 언어를 로직(Curry-Howard 대응) 및 기타 유형의 수학 시스템으로 재해석할 수 있도록 한다.

논리

Curry-Howard 대응관계에서 Currying과 Uncurrying의 존재는 논리정리AB ) ( ) { B C AB C동등하다.

헤이팅 대수의 범주의 지수 Q Q 일반적으로 재료 P (\ P Q로 표기된다. 분포 헤이팅 대수는 부울 대수로, 지수 객체는 명시적 형식인 P\to 이다t 지수 객체는 실제로 물질적 [19]함의입니다.

범주론

카레와 카레에 대한 위의 개념은 범주 이론에서 가장 일반적이고 추상적인 진술을 발견합니다.커링은 지수 객체의 보편적 특성으로 데카르트적 닫힌 범주에서 결합을 일으킨다.즉, 이항 :( × ) {\ f\display ( YZ}의 형태와 지수 g : Y {\ g Z의 형태 사이에는 자연스러운 동형이 존재한다.

이는 닫힌 모노이드 범주에서 더 넓은 결과로 일반화된다.Currying은 텐서 곱과 내부 Hom이 인접 함수라는 것을 나타냅니다. 즉, 모든 B B 대해 자연스러운 동형이 존재합니다.

여기서 Hom은 카테고리 내 모든 형태소의 (외부) Hom-functor를 , BC \ \ C는 닫힌 모노이드 카테고리 내 내부 Hom-functor를 나타낸다.집합의 범주에서 두 집합은 동일합니다.제품이 데카르트 곱일 경우 내부 홈 C B C 지수 B C가 됩니다.

카레링은 두 가지 방법 중 하나로 분해될 수 있다.하나는 범주가 닫히지 않아 내부 홈 펑터가 없는 경우입니다(아마 이러한 펑터에는 여러 가지 선택지가 있기 때문일 수 있습니다).또 다른 방법은 모노이드가 아니기 때문에 제품이 없는 경우(즉, 객체 쌍을 기록하는 방법이 없는 경우)입니다.제품과 내부 홈을 모두 포함하는 범주는 정확히 닫힌 모노이드 범주입니다.

데카르트 닫힌 범주의 설정은 고전 논리의 논의에 충분하다; 닫힌 모노이드 범주의 보다 일반적인 설정은 양자 [20]계산에 적합하다.

이 두 가지 차이는 데카르트 범주(세트 범주, 완전 부분 순서 또는 헤이팅 대수와 같은)의 곱은 데카르트 곱일 뿐이며, 순서 있는 항목 쌍(또는 목록)으로 해석됩니다.단순 유형 람다 미적분은 데카르트 닫힌 범주의 내부 언어이며, 이러한 이유로 쌍과 목록이 LISP, 체계 및 많은 함수 프로그래밍 언어의 유형 이론에서 주요 유형입니다.

반면, 모노이드 범주(힐버트 공간 및 함수 분석의 벡터 공간 등)의 곱은 텐서 곱이다.이러한 범주의 내부언어는 양자논리의 한 형태인 선형논리이며, 대응하는 유형체계선형형 시스템이다.이러한 범주는 얽힌 양자 상태를 기술하는 데 적합하며, 보다 일반적으로, 양자 역학, 대수 위상의 거미줄 및 끈 [1]이론에 대한 커리-하워드 대응의 광범위한 일반화를 가능하게 한다.선형 유형 시스템 및 선형 로직은 상호 제외 잠금 및 자동판매기 작동과 같은 동기화 원본을 설명하는 데 유용합니다.

부분 기능 응용 프로그램과의 대조

카레링과 부분 기능 적용은 종종 [21]결합됩니다.두 함수의 중요한 차이 중 하나는 부분적으로 적용된 함수를 호출하면 결과가 즉시 반환되는 것이지, 커리잉 체인의 다른 함수는 반환되지 않는다는 것입니다. 차이는 두 [22]개보다 큰 함수에 대해 명확하게 설명할 수 있습니다.

f :( × × ) {\ f\times ( N 의 함수에서 는 (X ( ( Z ) \ displaystyle ( 즉, 첫 번째 함수의 평가는f (,2)({f(, 3로 표현될 수 있지만, 큐레이션된 함수의 평가는()(() (3)({cured} (1)(3로 표현되며, 각 인수에 의해 반환됩니다.악의에 찬스( ) { f { \ { } 하면, 2 개의 인수를 사용하는 함수가 아니고, 1 개의 인수를 사용하고, 다른 함수를 반환하는 함수가 남습니다.

이와는 대조적으로, 부분 함수 적용은 함수에 다수의 인수를 고정하는 과정을 말하며, 더 작은 아리티의 또 다른 함수를 생성한다.의 f{\ f 에 따라 첫 번째 인수를 수정(또는 '수정 partial () :( × ) \ ( \ ) \ N이 함수의 평가는 3)로 이 경우 부분 함수를 적용한 결과는 두 개의 인수를 사용하는 함수입니다.

직관적으로, 부분 함수 애플리케이션은 "함수의 첫 번째 인수를 수정하면 나머지 인수의 함수를 얻게 됩니다."라고 말한다.예를 들어 함수 div가 나눗셈 연산 x/y를 의미한다면 매개 변수 x가 1로 고정된 div(, div 1)는 또 다른 함수입니다. 즉, 인수의 곱셈 역수를 반환하는 함수 inv(y) = 1/y로 정의되는 함수 inv와 동일합니다.

부분적용에 대한 실질적인 동기는 매우 자주 함수에 일부 그러나 모든 인수를 공급함으로써 얻어진 함수가 유용하다는 것이다; 예를 들어, 많은 언어들은 다음과 유사한 함수 또는 연산자를 가지고 있다.plus_one. 부분적용에서는 예를 들어 첫 번째 인수로 1바운드를 갖는 덧셈 연산자를 나타내는 함수를 만드는 등 이러한 함수를 쉽게 정의할 수 있습니다.

부분 적용은 f: ( × × ) { X { a X 다음 f ) y N( ) fcurry ( f )= curry ( ) = f curry f f f f f 。}(y)(z)} 단순히) a } 표시합니다

따라서 부분적 적용은 고정점에서의 큐어 함수로 감소한다.또, 고정점에서의 큐리 함수는, (삼차적으로) 부분 애플리케이션이다.추가 증거를 위해 ( ,) { f ( , )( , g (, 될 수 있습니다. 따라서 부분적인 적용은 단일 커리 연산으로 축소될 수 있습니다.따라서 카레는 많은 이론적인 경우에 재귀적으로 적용되는 수술로 보다 적절하게 정의되지만 이론적으로는 부분적인 적용과 구별할 수 없다(연산으로 간주되는 경우).

따라서 부분적 응용은 어떤 함수의 입력 순서에 대한 카레 연산자의 단일 응용의 객관적 결과라고 정의할 수 있다.

「 」를 참조해 주세요.

메모들

  1. ^ a b John C. Baez와 Mike Stay, "물리학, 위상, 논리계산: 로제타 스톤", (2009) ArXiv 0903.0340 in New Structures for Physics, ed.밥 코케, 물리학 강의 노트 vol. 813, 베를린, 스프링거, 2011, 페이지 95-174.
  2. ^ a b Gottlob Frege, Grundgesetze der 산술메틱 I, Jena:Verlag Herman Pohle, 1893년 36파운드
  3. ^ a b c 윌라드오르만 퀴네, 모세 쇤핀켈의 "Bausteine der mathischen Logik", 355–357페이지, 특히 355.Stefan Bauer-Mengelberg에 의해 Jean van Heijenoort(1967), 수학논리학의 소스북, 1879–1931에서 "수리논리의 구성 요소에 대하여"로 번역되었습니다.하버드 대학 출판부, 페이지 355-66.
  4. ^ a b 스트레 이치, 크리스토퍼(2000년)."프로그래밍 언어에서 기본 개념".그리고 상징적 계수Higher-Order.13시 21.CiteSeerX 10.1.1.332.3161. doi:10.1023/A:1010000313106.S2CID 14124601.여러개의 피연산자 하나의 피연산자 사업자의 연속적인 응용 프로그램에 사업자들을 줄이기 위한 장치 Schönfinkel에 의해 유래.(1967년 강의 노트 Reprinted.) 있다.
  5. ^ a b Reynolds, John C. (1972). "Definitional Interpreters for Higher-Order Programming Languages". Proceedings of the ACM Annual Conference. 2 (4): 717–740. doi:10.1145/800194.805852. S2CID 163294. In the last line we have used a trick called Currying (after the logician H. Curry) to solve the problem of introducing a binary operation into a language where all functions must accept a single argument. (The referee comments that although "Currying" is tastier, "Schönfinkeling” might be more accurate.)
  6. ^ 케네스 슬론저와 베리 L. 커츠입니다프로그래밍 언어의 형식 구문의미론.1995년, 페이지 144
  7. ^ Henk Barendregt, Erik Barendsen, "람다 미적분 입문", 2000년 3월 8페이지.
  8. ^ Curry, Haskell; Feys, Robert (1958). Combinatory logic. Vol. I (2 ed.). Amsterdam, Netherlands: North-Holland Publishing Company.
  9. ^ Graham Hutton. "Frequently Asked Questions for comp.lang.functional: Currying". nott.ac.uk.
  10. ^ Curry, Haskell B. (1980). "Some Philosophical Aspects of Combinatory Logic". Studies in Logic and the Foundations of Mathematics. 101: 85–101. doi:10.1016/S0049-237X(08)71254-0. Some contemporary logicians call this way of looking at a function "currying", because I made extensive use of it; but Schönfinkel had the idea some 6 years before I did.
  11. ^ I. Heim과 A.크라처(1998).Generative Grammar의 의미.블랙웰이요
  12. ^ Turner, David (1 Jun 1997). "Programming language, Currying, or Schonfinkeling?". computer-programming-forum.com. Retrieved 3 March 2022.
  13. ^ a b J.P. May, 대수위상 간결한 과정, (1999) 시카고 수학 강의 ISBN 0-226-51183-9
  14. ^ nLab에서 콤팩트하게 생성된 위상 공간
  15. ^ P.I. 부스와 J.틸로슨, "모노이드 닫힌, 데카르트 닫힌 위상 공간의 편리한 범주", 태평양 수학 저널, 88(1980) 페이지 33-53.
  16. ^ nLab에서 토폴로지 공간의 편리한 범주
  17. ^ a b c Joseph J. Rotman, 대수적 위상 입문(1988) Springer-Verlag ISBN 0-387-96678-1 (증거는 11장 참조)
  18. ^ Barendregt, H.P. (1984). The Lambda Calculus. North-Holland. ISBN 978-0-444-87508-2. (정리 1.2.13, 1.2.14 참조)
  19. ^ Saunders Mac Lane 및 Ieke Moerdijk, 기하학 및 로직의 시브스(1992) 스프링거 ISBN 0-387-97710-4(1장, 페이지 48-57) 참조
  20. ^ Samson Abramsky와 Bob Coecke, "양자 프로토콜의 범주적 의미론"
  21. ^ "The Uncarved Blog: Partial Function Application is not Currying". uncarved.com. Archived from the original on 2016-10-23.
  22. ^ "Functional Programming in 5 Minutes". Slides.

레퍼런스

외부 링크