我在使用let,in,end定义curried函数时遇到了麻烦。 我有以下代码:
filter_many listOfFunc listOfElements =
let
fun allPredicate(element,[]) = true
| allPredicate(element,(a,b)::xs) = a(element) andalso (allPredicate(element,xs))
fun isPredicateAux(element) = allPredicate(element,listOfFunc)
in
List.filter isPredicateAux listOfElements
end;
我们的想法是获取一个元素和一个元组列表(a,b)的列表,而a是一个谓词函数。 (fn'a => bool)。 该函数将返回listOfElement中的所有元素,这些元素向ListOfFunction中的所有谓词返回true。 请在ListOfFunctions中删除每个元组的第二个变量,以供日后使用。
在尝试运行此代码时,我收到以下错误:
stdIn:123.54-123.64 Error: unbound variable or constructor: listOfFunc
stdIn:125.30-125.44 Error: unbound variable or constructor: listOfElements
stdIn:1.1-106.11 Error: unbound variable or constructor: filter_many
stdIn:106.12-106.22 Error: unbound variable or constructor: listOfFunc
stdIn:106.23-106.37 Error: unbound variable or constructor: listOfElements
我似乎无法理解造成这个问题的原因。应该向那些使用它们的人看到所有的功能和变量。我在这里缺少什么?
感谢。
答案 0 :(得分:1)
您忘记在功能声明前写fun
。