fun square(x:int) = x*x;
map (~, map (square, map (~, [1, 2, 3] )));
它只是三个数字(1,4,9)的平方吗? 我尝试在新泽西州的SML上运行它,但一直收到这个错误......
- fun square(x:int) = x*x;
val square = fn : int -> int
- map(~, map(square, map(~,[1,2,3])));
stdIn:3.11-3.35 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z -> 'Y
operand: ('X -> 'X) * int list
in expression:
map (~,1 :: 2 :: <exp> :: <exp>)
stdIn:3.4-3.36 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z -> 'Y
operand: (int -> int) * _
in expression:
map (square,map (~,<exp> :: <exp>))
stdIn:3.1-3.36 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z -> 'Y
operand: ('X -> 'X) * _
in expression:
map (~,map (square,map <exp>))
-
答案 0 :(得分:0)
正如您自己发现的那样,此代码将打印的唯一内容是错误消息。这样做的原因是map
是一个curried函数,并没有以元组形式接受它的参数。
要解决此问题,您需要将map
称为curried函数(即map f xs
而不是map (f, xs)
)。