我有这样的代码来过滤字符串列表中的第一个字母是大写:SML:如何使用List.filter
fun f s = Char.isUpper(String.sub(s,0));
fun only_capitals (xs : string list) = List.filter(f , xs);
但是,当编译,我总是收到错误:
operator domain: 'Z -> bool
operand: (string -> bool) * string list
in expression:
List.filter (f,xs)
我不知道如何解决这个问题。可以告诉我,这个错误是什么意思,以及如何解决这个问题。
谢谢:)
这似乎是Dan Grossman的(Coursera/U Washington)编程语言分配hw#3,问题#1。 “编写一个函数'only_capitals',它接受一个字符串列表并返回一个字符串列表,该列表只包含以大写字母开头的字符串,假设所有字符串都至少有一个字符,使用'List.filter','Char .isUpper'和'String.sub'来制作1-2行解决方案。“ –
这可能值得引用Grossman的讲义第13页来指导这项任务。 “例如,List.foldl((fn(x,y)=> x + y),0,[3,4,5])不会因为List而进行类型检查。foldl期望'a *'b - >'b函数,而不是三元组。正确的调用是List.foldl(fn(x,y)= x + y)0 [3,4,5] ...“它使用currying,是推力,这也让我绊了一会儿。 – brntsllvn