【发布时间】:2015-02-04 12:36:56
【问题描述】:
我在用 let,in,end 定义柯里化函数时遇到问题。 我有以下代码:
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=> 布尔值)。 该函数将返回 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
我似乎无法理解导致此问题的原因。使用它们的人应该看到所有的函数和变量。我在这里错过了什么?
谢谢。
【问题讨论】: