我正在尝试创建接受整数"a"和一个列表的代码,并返回列表中小于 a 的每个值的列表。我已经创建了代码,可以确定列表中的第一个数字是否小于"a",但我无法完全弄清楚递归。任何帮助都会很棒!
fun smallethan(a,[]) = [] | smallerthan(a,list) = if hd(list) < a then [hd(list)];
非空列表的情况是
- 如果第一个元素小于
a
,则将该元素放在列表尾部递归得到的元素前面, - 否则,结果只是尾巴递归的结果。
由于您显然已经了解了模式匹配,请使用它:
fun less (a, []) = []
| less (a, x::xs) = if x < a
then x :: less (a, xs)
else less (a, xs)
你可以使用过滤器。我测试了下面的代码,它可以工作。
filter ((fn x => fn y => (x >= y)) a) lst
没有高阶函数:
fun less (a, []) = []
| less (a , x::lst) = if x < a then [x] @ less (a,lst) else [] @ less (a,lst);
即
fun less (a, []) = [] | less (a , x::lst) = if x < a then [x] @ less (a,lst) else [] @ less (a,lst);
val less = fn : int * int list -> int list
- less (10, [8,9,10,11,12]);
val it = [8,9] : int list