처음에는 함수 프로그래밍과 F #의 초보자 였으므로 이런 일을 할 수 있는지는 알 수 없습니다. 이 함수가 있다고 가정 해 봅시다 :F # 및 lisp와 같은 적용 함수
let sum x y z = x + y + z
그리고 어떤 이유로 우리는 목록의 요소를 인수로 사용하여 호출하려고합니다. 내 첫 번째 시도는 다음과 같이 그냥 수행했습니다.
//Seq.fold (fun f arg -> f arg) sum [1;2;3]
let rec apply f args =
match args with
| h::hs -> apply (f h) hs
| [] -> f
... 컴파일되지 않습니다. 고정 유형 시스템을 사용하는 f
의 유형을 판별하는 것은 불가능한 것처럼 보입니다.
하스켈에 identical question이 있고 유일한 솔루션은 유형 시스템을 능가하기 위해 Data.Dynamic
을 사용합니다. 나는 F #에서 그것에 가장 가까운 아날로그가 Dynamitey이라고 생각하지만, 맞는 지 모르겠다. 이 코드
let dynsum = Dynamitey.Dynamic.Curry(sum, System.Nullable<int>(3))
는 또한 sum
는 .NET의 위임하지 입력 obj
의 dynsum
변수를 생성하고,이 유형의 개체를 호출 할 수 없습니다.
질문 : 그렇다면 F #에서 해당 라이브러리를 사용하거나 사용하지 않고 어떻게 할 수 있습니까?
예를 들어 해킹 없이는 할 수 없습니다. f 유형이 무한히 커집니다. 나는 이것의 어딘가에 중복이 있다고 확신한다. –
이것은 닫기이다. https://stackoverflow.com/questions/7813472/why-wont-my-computer-let-me-greet-my-customers –
@JohnPalmer 감사, 그것을 시험해 보겠다. 그러나 필자의 경우에는 [such] (http://stackoverflow.com/a/7813710/657390) 유형을 작성하는 방법이 명확하지 않다. – yuyoyuppe