2012-11-06 2 views
1

누구나 아래 정의 된대로 다음 함수의 유형을 알아내는 방법을 설명해 주실 수 있습니까?접이식 함수의 ml 유형 분석

fun fold func [] base = base 
| fold func (x::xs) base = fold func xs (func x base); 

내 대답은 'C ->'입니다 목록 -> 'B ->'나,하지만 난 내 SML 프로그램에 코드에 연결 한 후 유형이 실제로되어야한다는 것을 알 ('A-> 'b ->'b) -> '목록 ->'b -> 'b.

나는 'a list ->'b -> 'b의 출처를 알고 있지만, 첫 번째 부분은 저를 혼란스럽게합니다. 그것은 func가 'a와 a'b라는 두 개의 인수를 취하여 'b'라는 기본 유형을 반환하기 때문입니까?

도움을 주시면 감사하겠습니다.

답변

1

func는 'a와 a'b라는 두 개의 인수를 사용하고 'b'인 기본 유형을 반환하기 때문에입니까?

예.

첫 번째 부분이 처음으로 가정했을 때 'c 인 경우 fold의 첫 번째 인수는 예를 들어 int이 될 수 있습니다. 분명히 int (또는 함수가 아닌 다른 것)을 func의 첫 번째 인수로 전달하는 것이 합법적이어서는 안되기 때문에 첫 번째 인수는 형식 시스템에이 인수에 대한 함수 만 허용하도록 지시하는 형식을 가져야합니다 .

실제로 모든 기능을 허용해서는 안되며 적절한 유형의 기능 만 허용해야합니다. 위의 상태로 인해 func에 해당하는 유형은 'a -> 'b -> 'b입니다.