我很难理解我需要创建的某个SML函数的类型。
它是一个辅助函数,应该从字符串列表中返回最长的字符串。
类型应为:(int * int -> bool) -> string list -> string
我应该如何阅读本文以及如何创建一个匹配的函数?
我开始遵循简单的代码:
fun helper(x,y)=x>y
但是现在我应该让这个方法返回一个字符串列表然后再返回一个字符串。但我似乎在这里缺少一些观点。
答案 0 :(得分:5)
这是一个curried函数的签名:(int * int -> bool) -> string list -> string
(int * int -> bool)
:这是第一个参数,它是一个接收两个整数的元组并返回一个布尔值的函数。看起来像一个谓词函数。string list
:这是第二个参数,一个字符串列表string
:这是您的函数的结果类型。例如,在Programming Languages(似乎是问题的来源)的过程中,有问题的函数应该看起来像:
fun longest_string_helper f xs = ...
其中
f
是(int * int -> bool)
xs
是string list
当然,该函数返回string
值。
请注意,函数声明中的参数由空格分隔,而不是在元组模式中。这证明这是一个有条理的功能。您可以在阅读第3部分的课程中阅读相关内容,在另一个封闭习语:Currying and Partial Application(第11页)下。