sml中的foldl操作
如果有人能在这里指导我,我将不胜感激,我真的想知道我做错了什么,为什么 这是我的代码:sml中的foldl操作,sml,Sml,如果有人能在这里指导我,我将不胜感激,我真的想知道我做错了什么,为什么 这是我的代码: fun get_longest xs = foldl((fn (x ,y ) => if String.size x >= String.size y then x else y),[],xs) 我的函数应该获取字符串列表并返回最长的字符串;如果列表为空,只需返回[] 但我得到了一个错误: Error: operator and operand don't agree [tycon misma
fun get_longest xs = foldl((fn (x ,y ) => if String.size x >= String.size y then x
else y),[],xs)
我的函数应该获取字符串列表并返回最长的字符串;如果列表为空,只需返回[]
但我得到了一个错误:
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
错误:运算符和操作数不一致[tycon不匹配]
运算符域:“Z*”Y->“Y”
操作数:(字符串*字符串->字符串)*int*'X
在表达上:
foldl((fn(,)=>if-then-else),0,xs)
未捕获异常错误
在以下位置引发:../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
foldl
是一个通用函数,它的类型是('a*'b->'b)->'b->'a list->'b
。因此,应将其称为foldl f s xs
。您将其称为foldl(f,s,xs)
。这是错误的,因为它使用元组作为参数调用foldl
,而foldl
不需要元组。如果有,它的类型将是('a*'b->'b)*'b*'a list->'b
foldl
是一个常用函数,它的类型是('a*'b->'b)->'b->'a list->'b
。因此,应将其称为foldl f s xs
。您将其称为foldl(f,s,xs)
。这是错误的,因为它使用元组作为参数调用foldl
,而foldl
不需要元组。如果是这样的话,它的类型将是('a*'b->'b)*'b*'a list->'b
查看以下签名:
您可以看到,您的函数应该具有以下形式
fun get_longest xs = foldl foo acc xs
其中,foo
是应用于元件和累加器的函数,acc
是初始累加器
提示:
get_longest
返回一个字符串
,因此累加器的类型应为字符串
。你的工作是找出一个合适的字符串来填充。请注意,此处所需的值[]
没有意义李>
xs
是一个字符串列表
,您的foo
函数应该具有类型string*string->string
。现在,您必须用适当的匿名函数替换foo
请看以下签名: 您可以看到,您的函数应该具有以下形式
fun get_longest xs = foldl foo acc xs
其中,foo
是应用于元件和累加器的函数,acc
是初始累加器
提示:
get_longest
返回一个字符串
,因此累加器的类型应为字符串
。你的工作是找出一个合适的字符串来填充。请注意,此处所需的值[]
没有意义李>
xs
是一个字符串列表
,您的foo
函数应该具有类型string*string->string
。现在,您必须用适当的匿名函数替换foo