SML更多的是两个列表

时间:2013-12-11 14:38:32

标签: function sml smlnj

需要帮助解决我无法解决的SML问题。基本上我有两个列表,我需要从每个列表中返回更大的内容。

示例电话:

Greater([8,4,12,5,6],[2,6,14,4,5]);

将返回(8,6,14,6)。

我刚开始使用SML中的列表,甚至不知道从哪里开始。

3 个答案:

答案 0 :(得分:3)

val greater = List.map Int.max o ListPair.zip

或者扩展一下:

fun greater(nil, nil)     = nil
  | greater(x::xs, y::ys) = (if x > y then x else y)::greater(xs, ys)
  | greater(_, _)         = raise Domain

答案 1 :(得分:1)

假设你有两个相等长度的列表,你可以定义这个函数:

fun greater nil nil = nil
  | greater (x::xs) (y::ys) = 
       if x > y then x::(greater xs ys) else y::(greater xs ys);

或者,通过将问题减少到从int对列表到int列表的映射:

fun zip nil nil = nil
  | zip (x::xs) (y::ys) = (x,y)::(zip xs ys);

fun max (x,y) = if x > y then x else y;

fun greater xs ys = map max (zip xs ys);

请注意,ML中的列表表示为[1,2,3]而不是(1,2,3),这是一个包含三个元素的元组。然后将此函数称为:

- greater [1,2,3,4] [2,3,4,5];
val it = [2,3,4,5] : int list

- greater [~1,8,3] [8,~1,~2];
val it = [8,8,3] : int list

答案 2 :(得分:1)

更好:

val greater = ListPair.map Int.max