이 주제에 관한 많은 문헌이 매우 조밀하다는 것은 불행한 일입니다. 나도 당신의 입장이었습니다. 프로그래밍 언어 : 응용 프로그램 및 해석에서 주제에 대한 첫 소개를 받았습니다.
http://www.plai.org/
추상적 인 아이디어를 요약 한 다음 당장 명확하지 않은 세부 사항을 요약하려고합니다. 첫째, 유형 추론은 제약 조건을 생성하고 해결하는 것으로 생각할 수 있습니다. 제약 조건을 생성하려면 구문 트리를 반복하고 각 노드에서 하나 이상의 제약 조건을 생성합니다. 예를 들어, 노드가 +
연산자 인 경우 피연산자와 결과는 모두 숫자 여야합니다. 함수를 적용하는 노드는 함수의 결과와 동일한 유형을 갖습니다.
가없는 언어의 경우 let
대체를 통해 위의 제약 조건을 맹목적으로 해결할 수 있습니다. 예를 들면 :
(if (= 1 2)
1
2)
여기서 if 문의 조건은 부울이어야하며 if 문의 유형은 해당 then
및 else
절의 유형과 동일하다고 말할 수 있습니다 . 우리가 알고 있기 때문에 1
와 2
치환, 숫자, 우리는 알고 if
문이 숫자입니다.
일이 더러워지고 잠시 동안 이해할 수 없었던 것은 let을 다루는 것입니다.
(let ((id (lambda (x) x)))
(id id))
여기에서 우리는 id
여러분이 전달한 것을 반환하는 함수, 그렇지 않으면 identity 함수라고도합니다. 문제는 함수의 매개 변수 유형 x
이 id
. 두 번째 id
는 유형의 함수로 a -> a
, a
무엇이든 될 수 있습니다. 첫 번째는 유형 (a -> a) -> (a -> a)
입니다. 이것은 let-polymorphism으로 알려져 있습니다. 핵심은 특정 순서로 제약 조건을 해결하는 것입니다. 먼저의 정의에 대한 제약 조건을 해결합니다 id
. 이것은입니다 a -> a
. 그런 다음 유형의 새롭고 별도의 복사본 id
을 각 장소에 대한 제약 조건으로 대체 할 수 있습니다 ( id
예 : a2 -> a2
및) a3 -> a3
.
그것은 온라인 자료에서 쉽게 설명되지 않았습니다. 그들은 알고리즘 W 또는 M에 대해서는 언급하지만 제약을 푸는 측면에서 작동하는 방식이나 let-polymorphism에 대해 언급하지 않는 이유는 언급하지 않습니다. 각 알고리즘은 제약 조건 해결에 순서를 적용합니다.
이 리소스는 알고리즘 W, M, 제약 조건 생성 및 해결의 일반적인 개념을 모두 함께 연결하는 데 매우 유용하다는 것을 알았습니다. 약간 조밀하지만 많은 것보다 낫습니다.
http://www.cs.uu.nl/research/techreps/repo/CS-2002/2002-031.pdf
다른 많은 논문도 훌륭합니다.
http://people.cs.uu.nl/bastiaan/papers.html
나는 그것이 다소 어두운 세계를 명확히하는 데 도움이되기를 바랍니다.