1
SML (메타 언어)을 처음 사용합니다. 누구든지 아래에 주어진 유형에서 함수를 파생시키는 방법을 말해 줄 수 있습니까? ('a ->'b) -> ('b 목록 -> c) ->'a -> 'c 목록SML : 해당 유형에서 함수 해석
SML의 카레 기능을 이해하는 데 어려움을 겪고 있습니다.
SML (메타 언어)을 처음 사용합니다. 누구든지 아래에 주어진 유형에서 함수를 파생시키는 방법을 말해 줄 수 있습니까? ('a ->'b) -> ('b 목록 -> c) ->'a -> 'c 목록SML : 해당 유형에서 함수 해석
SML의 카레 기능을 이해하는 데 어려움을 겪고 있습니다.
이
- fun f g h x = [h [g x]];
> val ('a, 'b, 'c) f = fn : ('a -> 'b) -> ('b list -> 'c) -> 'a -> 'c list
여기 어떻게 내가 해냈어 작동합니다.
은 우리가
('a -> 'b) -> ('b list -> 'c) -> 'a -> 'c list
그래서 우리는 세 가지 카레 인수 기능을 원하는지 유형에게 주어진 첫 번째 두 기능은, 아무것도 세 번째입니다. 그래서 우리는 쓰기 :
fun f g h x = ....
이제 첫 번째 인수는 x는 유형 'a
의 뭔가 걸리는 기능입니다 그래서 우리는 오른쪽에
g x
를 원한다. 형식은 'b
입니다. 이제 h
는 'b list
에 소요, 그래서 우리는이 유형 'c
의 값을 생성하지만, 우리는 'c list
그래서 우리는 단지 목록에 그것을 넣어 반환 f
을 원하는
h [g x]
쓸 수 있습니다, 그래서 우리가 얻을 :
fun f g h x = [h [g x]];
질문을 명확히 할 수 있습니까? 이 유형을 가진 무한한 수의 함수가 있습니다. 유형을 부여한 다음 "이 유형을 가진 함수를 제공하십시오"라고 말할 수는 없습니다. 무한한 숫자가 있습니다. 다른 방향으로가는 것은 작동합니다. 함수를 SML로 작성하면 해당 유형을 계산할 수 있습니다. 아마도 해당 유형의 _a_ 함수를 찾고 있습니까? 그게 당신이 요구하는 것입니까? –
HiRayToal, 네, 정말로. 이 유형을 충족시키는 한 모든 함수가 될 수 있습니다. 또한 유형에서 함수를 추론하는 방법을 설명 할 수 있다면 좋을 것입니다. –
내가 볼 수 있듯이 세 가지 유형이 있습니다 : 'a'b 'c 다음과 같이 쓸 수 있습니다 : fun foo a b c = b [a c]; 정확하지는 않지만 이럴 가능성이 있습니까? –