함수 목록과 인수를 취하는 함수를 작성하는 데 문제가 있습니다. 전달 된 인수로 각 함수를 호출하고 호출 결과 목록을 반환합니다. 예 : build [f, g, h] 2
이 함수를 호출했지만 호출 대신 결과가 반환됩니다. [f(2), g(2), h(2)]
그런데 SML/NJ를 사용합니다. SML의 고차 함수 숙제
fun build functions TheArgument = if functions = [] then [] else
[hd(functions) TheArgument] @ build tl(functions) TheArgument;
를하지만 다음과 같은 오류 준 : 마지막으로
stdIn:2.9-2.36 Error: operator is not a function [equality type required]
operator: ''Z
in expression:
(hd functions) TheArgument
stdIn:1.10-2.70 Error: case object and rules don't agree [tycon mismatch]
rule domain: ''Z list * 'Y
object: ('X list -> 'X list) * 'W
in expression:
(case (arg,arg)
of (functions,TheArgument) =>
if functions = nil then nil else (<exp> :: <exp>) @ <exp> <exp>)
을, 나는 포기하고 몇 가지 조사를하려고 노력했다. Higher Order Functions in SML/NJ
나는이로 재정의하는 시도 :
fun build [] argument = []
| build f::rest argument = [f(argument)] @ build rest argument;
그러나 컴파일러는이 뱉어 : 내가 잘못
stdIn:2.14-2.16 Error: infix operator "::" used without "op" in fun dec
stdIn:1.10-2.67 Error: clauses don't all have same number of patterns
stdIn:2.14-2.16 Error: data constructor :: used without argument in pattern
stdIn:1.10-2.67 Error: types of rules don't agree [tycon mismatch]
earlier rule(s): 'Z list * 'Y -> 'X list
this rule: ('W -> 'V) * 'U * 'T * 'W -> 'V list
in rule:
(f,_,rest,argument) => (f argument :: nil) @ (build rest) argument
를하고있는 중이 야 무엇을 나는 다음과 같은 질문을 찾았나요?
나는 심각한 손실이 있습니다. 나는 비밀스런 Java/C 오류 메시지를 처리 할 수 있습니다. 그러나 이것은 나에게 너무 외계인입니다.
p.s .: 함수는 build (functions, argument)를 통해 호출 할 수 없으며 두 개의 인수가 될 필요가 있고 두 개의 인수가 아닌 튜플이어야합니다.
주 ...
그것은 SML 인터프리터 수없는이 목록은 따라서 것을 이해로 해결하는 대신 오 f append (@)를 사용하여 목록의 한 요소를 추가하려면 cons (: :)를 사용해야합니다. 일반적으로 가능한 경우 추가를 사용하지 않는 것이 좋습니다. 실행되지 않은 실행 시간으로 인해 오른쪽 목록이 큰 경우 특히 중요합니다. 이 경우 역순으로 목록을 작성한 다음 완료하면 역순으로 처리해야합니다. –
최종 버전에서 잊어 버린 유일한 것은'f :: rest' 패턴 주위에 괄호를 넣는 것입니다. 그것들이 없다면 두 번째 방정식은'f','::','rest','argument' (첫 번째 방정식에 의해 표시된 두 개가 아닌) 네 개의 인수를 갖습니다. 그리고 컴파일러가 정확히 말한 것입니다 (그의 말로); – chris