未绑定的变量或构造函数

时间:2014-12-06 11:28:54

标签: sml smlnj

我在使用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

我似乎无法理解造成这个问题的原因。应该向那些使用它们的人看到所有的功能和变量。我在这里缺少什么?

感谢。

1 个答案:

答案 0 :(得分:1)

您忘记在功能声明前写fun