我很喜欢SML,并做了一个功课。 “编写一个函数number_in_month,它接受一个日期和一个月的列表(即一个int),并返回列表中给定月份的日期数。”
这就是我的工作,并且看不出它有什么问题。请帮忙。
`
fun number_in_month (dates: (int*int*int) list,month:int) =
if ((#2 (hd dates)) = month)
then val flag=1 flag+number_in_month(tl dates, month)
else number_in_month((tl dates),month)`
REPL告诉您:用EQUALOP替换VAL。
答案 0 :(得分:2)
你不能“那样”绑定变量。变量的绑定是一个声明,因此无法在需要表达式的地方完成。
在这种情况下,您必须使用let-in-end表达式
fun foo x =
let
val a = 42
in
a*x
end
答案 1 :(得分:1)
我试图自己修复它,这是我的解决方案:
有趣的number_in_month(dias:(int * int * int)list,mes:int)= 如果是空的dias 那么0 否则if((#2(hd dias))= mes) 然后让val flag = 1 + number_in_month(tl dias,mes) 在国旗 结束 else number_in_month((tl dias),mes)
我希望你也可以使用它!
答案 2 :(得分:0)
来自REPL的错误消息令人困惑,但如果您需要在函数中使用赋值语句,则Jesper是正确的,您应该使用let-in-end表达式。这肯定会让你解决错误。
答案 3 :(得分:0)
你的问题是无休止的递归。编译器无法摆脱它因为独立于结果如果......然后你再次运行你的函数 试试这个:
fun number_in_month (dates: (int*int*int) list,month:int) =
if null dates
then 0
else if ((#2 (hd dates)) = month)
then val flag=1 flag+number_in_month(tl dates, month)
else number_in_month((tl dates),month)