카레 기능에 대한 중간 평가가 좀 더 있습니다. 함수가 3 개의 숫자를 합치기를 원한다고 가정 해 봅시다. 카레 버전으로,
:> sum(1,2,3)
1 + 2 + 3 (substitution using pattern matching on the contents of the tuple)
(1 + 2) + 3
3 + 3
6
한편 : 첫 번째 버전에 다음과 같은 거친 평가의 추적을 고려 또는
fun sum (x,y,z) = x + y + z
,
fun sum x y z = x + y + z
: 우리는 다음과 같은 두 가지 정의를 고려 SML은 표현을 평가할 때 즉석에서 일부 익명 함수를 생성합니다. 이것은 카레 함수가 단일 함수에 여러 인수를 적용하는 동작을 캡처하기 위해 익명 함수를 다른 함수의 결과로 반환 할 수 있다는 이점을 활용하기 때문입니다. 함수를 구성하는 데 일정한 시간이 필요합니다.
:> sum 1 2 3
((sum 1) 2) 3
(((fn x => (fn y => (fn z => x + y + z))) 1) 2) 3
((fn y => (fn z => 1 + y + z)) 2) 3
(fn z => 1 + 2 + z) 3
1 + 2 + 3
(1 + 2) + 3
3 + 3
6
그래서 몇 가지 추가 단계가 있습니다. 그러나 프로그램에서 성능 문제가 발생해서는 안됩니다.