我很难理解我需要创建的某个 SML 函数的类型。
它是一个辅助函数,应该从字符串列表中返回最长的字符串。类型应该是:(int * int -> bool) -> string list -> string
我应该如何阅读这篇文章以及如何创建一个匹配的函数?
我从以下简单代码开始:
fun helper(x,y)=x>y
但现在我应该有这个方法来返回一个字符串列表,然后是一个字符串。但我似乎在这里遗漏了一些要点。
我很难理解我需要创建的某个 SML 函数的类型。
它是一个辅助函数,应该从字符串列表中返回最长的字符串。类型应该是:(int * int -> bool) -> string list -> string
我应该如何阅读这篇文章以及如何创建一个匹配的函数?
我从以下简单代码开始:
fun helper(x,y)=x>y
但现在我应该有这个方法来返回一个字符串列表,然后是一个字符串。但我似乎在这里遗漏了一些要点。
这是一个柯里化函数的签名:(int * int -> bool) -> string list -> string
(int * int -> bool)
: 这是第一个参数,它是一个接收两个整数的元组并返回一个布尔值的函数。看起来像一个谓词函数。string list
: 这是第二个参数,一个字符串列表string
: 这是你的函数的结果类型。例如,在编程语言课程(这似乎是问题的来源)中,有问题的函数应该看起来像:
fun longest_string_helper f xs = ...
在哪里
f
是类型的函数值(int * int -> bool)
xs
是类型的列表值 string list
当然,该函数返回一个string
值。
请注意,函数声明中的参数由空格分隔,而不是在元组模式中。这证明这是一个柯里化函数。您可以在第 3 部分的课程阅读笔记中阅读有关此内容的信息,在另一个闭包成语:柯里化和部分应用程序(第 11 页)下。