【发布时间】:2012-04-09 11:23:09
【问题描述】:
我正在尝试在 SML 中创建一个函数,该函数接受一个列表和一个 int,并返回一个包含小于 int int * int list -> int list 的所有元素的列表,我编写了以下代码:
- fun less (e, L) =
= map (fn a => if a < e then a else []) L;
以下代码也不起作用:
- fun less (e, L) =
= map (fn a => if a < e then a) L;
我得到的错误是:
stdIn:22.15-22.38 Error: types of if branches do not agree [overload]
then branch: 'Z
else branch: 'Y list
in expression:
if a < e then a else nil
我认为问题出在 else 部分,但我不知道该怎么做,有人有什么建议吗?我应该使用 map、foldl 或 foldr 函数。
编辑:
- fun less (e, L) =
= let
= val acc = []
= in
= foldr (fn a => if a < e then a::acc else acc) acc L
= end;
仍然给我错误,以下错误:
stdIn:241.3-241.54 Error: operator and operand don't agree [overload]
operator domain: 'Z * 'Y -> 'Y
operand: 'X -> 'X list
in expression:
foldr (fn a => if <exp> < <exp> then <exp> :: <exp> else acc)
【问题讨论】: