如果有人能在这里指导我,我真的很感激,我真的很想知道我做错了什么,为什么?
这是我的代码:
fun get_longest xs = foldl((fn (x ,y ) => if String.size x >= String.size y then x
else y),[],xs)
Run Code Online (Sandbox Code Playgroud)
我的函数应该采用字符串列表并返回最长的字符串; 如果列表为空,只是return [].
但是我收到了这个错误:
Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z * 'Y -> 'Y
operand: (string * string -> string) * int * 'X
in expression:
foldl ((fn (<pat>,<pat>) => if <exp> then <exp> else <exp>),0,xs)
uncaught exception Error
raised at: ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27
../compiler/TopLevel/interact/evalloop.sml:44.55
../compiler/TopLevel/interact/evalloop.sml:296.17-296.20
Run Code Online (Sandbox Code Playgroud)
看看foldl的签名:
val foldl : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b
Run Code Online (Sandbox Code Playgroud)
您可以看到您的函数应该具有该表单
fun get_longest xs = foldl foo acc xs
Run Code Online (Sandbox Code Playgroud)
foo函数在哪里应用于元素和累加器,并且acc是初始累加器.
提示:
get_longest返回a string,累加器应该有类型string.你的工作是找到一个合适的字符串来填写.请注意,[]你想要的值没有意义.xs是一个string list,你的foo函数应该有类型string * string -> string.现在你必须用foo适当的匿名函数替换.