2014-01-30 1 views
1

SML 언어를 사용하는 함수형 프로그래밍을 배우고 있습니다. 내 학습 노트를 읽는 동안, 어떤 종류의 기능 (tuppled 또는 curried)이 더 빨리 수행되는지 묻는 질문을 보았습니다.SML/NJ에서 함수가 대결 함수 대 카툰 함수

강사가 언어 구현의 문제라고 말한 비디오 here을 보았습니다. SML/NJ가 tuppled 함수를 사용하여 더 빨리 수행한다고 언급했지만 (입니다.

내 강사는 카레 기능이 더 많은 폐쇄를 생성하기 때문에라고 말하지만 나는 제대로 듣지 못했다고 생각합니다.

누군가가이 문제에 대해 자세히 설명해 줄 수 있습니까?

답변

1

카레 기능에 대한 중간 평가가 좀 더 있습니다. 함수가 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 

그래서 몇 가지 추가 단계가 있습니다. 그러나 프로그램에서 성능 문제가 발생해서는 안됩니다.