-2
條件:
當1.清單是長於2列表返回值:1
當1.列表具有相同數量的元件作爲2.列表返回值的:0 當1列表比w短。列表返回值:〜1SML函數的參數
([1,2,4,5],[3,2,5]);
1
([1,2],[1,5]);
0
([5],[8,2,3]);
~1
條件:
當1.清單是長於2列表返回值:1
當1.列表具有相同數量的元件作爲2.列表返回值的:0 當1列表比w短。列表返回值:〜1SML函數的參數
([1,2,4,5],[3,2,5]);
1
([1,2],[1,5]);
0
([5],[8,2,3]);
~1
嘛length
功能可能是你在這種情況下的朋友:
fun foo (xs, ys) =
let
val len_xs = length xs
val len_ys = length ys
in
case (len_xs < len_ys, len_xs > len_ys) of
(true, false) => ~1
| (false, true) => 1
| (false, false) => 0
end
這將產生的結果:
- foo ([1,2,4,5],[3,2,5]);
val it = 1 : int
- foo ([1,2],[1,5]);
val it = 0 : int
- foo ([5],[8,2,3]);
val it = ~1 : int
然而,這是一種效率低下和醜陋。所以,我們也可以只是一個單元,每個列表的決絕在一個時間,直到其中一個(或兩個)被空:
fun bar ([], []) = 0
| bar (_, []) = 1
| bar ([], _) = ~1
| bar (_ :: xs, _ :: ys) = bar (xs, ys)
其中給出的結果:
- bar ([1,2,4,5],[3,2,5]);
val it = 1 : int
- bar ([1,2],[1,5]);
val it = 0 : int
- bar ([5],[8,2,3]);
val it = ~1 : int
嗯,首先,你可能不想去閱讀基本的sml。接下來,您可以放入您喜歡的任何變量名稱,但這是毫無意義的。 –
我沒有看到這個地方的用法。所以我不得不問。抱歉。 – Knaas
那麼它既是美學目的,也是 「表演」。正如我在別處提到的那樣,通配符 的值不會綁定到變量,因此理論上您可以節省資源。然而,解釋器/編譯器 可能足夠聰明,無論如何都可以進行這種優化,而這個 也是審美部分的作用。 –