我正在进行此练习,要求计算布尔列表中有多少值为真。
我输入了这个:
fun countt xs = foldl (fn (x,y) => if x=true then y=y+1) 0 xs;
显然,这是错误的。我收到以下错误:
stdIn:54.21-54.24 Error: syntax error: deleting RPAREN INT0
现在,我搜索了一下,发现RPAREN是一个语法错误。但我无法弄清楚为什么首先出现问题。
答案 0 :(得分:3)
在函数式编程语言中,if表达式必须同时具有branch和else分支(并且它们必须具有相同的类型)。 你的if表达式只有一个then分支。
此外,x=true
始终评估为与x
相同的值,因此您只需撰写if x then ... else ...
。
最后,看起来你正试图在then分支中编写一个赋值。请记住,foldl通过将累加器(y
)重复传递给函数来工作,因为它使用xs
遍历列表。因此,如果您想更新累加器,您只需返回更新的值。
答案 1 :(得分:0)
只是为了补充上一个答案,这里有建议的修改:
fun countt xs = foldl (fn (x,acc) => if x then acc+1 else acc) 0 xs;