需要SML問題的幫助我似乎無法解決。基本上我有兩個列表,我需要從每個列表返回更大的值。SML大於兩個列表
例呼叫:
Greater([8,4,12,5,6],[2,6,14,4,5]);
將返回(8,6,14,6)。
我剛剛開始使用SML中的列表工作,甚至不知道從哪裏開始。
需要SML問題的幫助我似乎無法解決。基本上我有兩個列表,我需要從每個列表返回更大的值。SML大於兩個列表
例呼叫:
Greater([8,4,12,5,6],[2,6,14,4,5]);
將返回(8,6,14,6)。
我剛剛開始使用SML中的列表工作,甚至不知道從哪裏開始。
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
感謝您的快速回復!儘管如此,有沒有這樣做的功能呢?只是想看看它是如何崩潰的。從來沒有使用過ListPair.zip,所以不確定具體做什麼。 – user3091510
@ user3091510,增加了自包含的實現。 –
哦,'ListPair.zip'從一對列表中創建一個列表對。 –
假設你有相同長度的兩個列表,你可以定義此功能:通過減少問題的
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
甚至更好:
val greater = ListPair.map Int.max
有隻有四個返回值。如果返回值是(8,6,14,5,6)? –