获取小于输入的值列表 - ML

时间:2018-03-17 16:25:52

标签: smlnj

我正在尝试创建一个带整数' a'和一个列表,并返回列表中小于a的每个值的列表。我创建的代码可以判断列表中的第一个数字是否小于' a'但我无法弄清楚递归。任何帮助都会很棒!

fun smallethan(a,[]) = [] | smallerthan(a,list) = if hd(list) < a then [hd(list)]; 

2 个答案:

答案 0 :(得分:0)

您可以使用过滤器。我测试了下面的代码并且它可以工作。

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

答案 1 :(得分:0)

非空列表的情况是

  • 如果第一个元素小于a,则将该元素放在列表尾部递归的前面,
  • 否则,结果只是尾部递归的结果。

由于您显然已经了解了模式匹配,请使用它:

fun less (a, []) = []
  | less (a, x::xs) = if x < a 
                      then x :: less (a, xs)
                      else less (a, xs)