-2
条件パラメータ:0 1:1。リスト2.リスト戻り値と同じ数の要素を持っていたとき1
:1.リストが長い2.リスト戻り値を超えました
リストはwよりも短かった。リスト戻り値:〜1SML機能が
([1,2,4,5],[3,2,5]);
1
([1,2],[1,5]);
0
([5],[8,2,3]);
~1
条件パラメータ:0 1:1。リスト2.リスト戻り値と同じ数の要素を持っていたとき1
:1.リストが長い2.リスト戻り値を超えました
リストは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
をしかし、これは非効率的でもありますそして醜い。だから我々はまた、ちょうどそれらの1つ(または両方)になるまでの時間で、リストの各1つの要素をやってのけることができる空の取得:
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で読んで行くwan'tかもしれません。次に、変数名をあなたの好きなところに置くことができますが、それは意味がありません。 –
私はどこでもこの使用法は見ませんでした。私は尋ねなければならなかった。ごめんなさい。 – Knaas
それは両方とも審美的な目的のためですが、 でも "パフォーマンス"です。他の場所で言及したように、 ワイルドカードの場合、値は変数にバインドされないため、理論的には リソースを保存します。しかし、インタプリタ/コンパイラ は、この最適化を行うのに十分にスマートであるかもしれません。この は、審美的な部分も再生する場所です。 –