ねえ、SMLとプログラミングにまったく慣れていないので、リスト内で結合する関数を作成したいと思います。たとえば、[x1、x2、x3、x4、...] = [(x1、x2)、(x3、x4) 、...]正しい方向に進むためのヒントや助けをいただければ幸いです。
2 に答える
3
問題を見ると、入力を一度に2つの項目で処理する必要があることが明らかになります。
それでは、各ペアで何をしたいのかを見てみましょう。x1とx2が現在見ているアイテムである場合、(x1, x2)
作成しているリストにペアを入れたいと思います。xs
との後に続くアイテムのリストである場合、ペアの後にxsを「結合」した結果が続くようにしますx1
。したがって、combine関数は次のように記述できます。x2
(x1, x2)
fun combineWithin (x1::x2::xs) = (x1, x2)::(combineWithin xs)
ただし、この定義はまだ完全ではありません。xs
少なくとも2つのアイテムがある場合のみを調べています。したがって、他の2つのケースで何をしたいのかを自問する必要があります。
空のリストの場合は簡単です。空のリストを組み合わせると、空のリストになります。
アイテムが1つしかないリストの場合は、空のリストを返すか、エラーを発生させる(または、1つのアイテムをそれ自体とペアにする)こともできます。言い換えれば、エラーcombineWithin [1,2,3]
を返す[(1,2)]
か[(1,2), (3,3)]
スローするかを決定する必要があります。
前者が必要だと判断した場合、関数は次のようになります。
fun combineWithin (x1::x2::xs) = (x1, x2)::(combineWithin xs)
| combineWithin _ = []
于 2010-09-24T10:49:55.130 に答える
-1
let rec pairs = function
| [] -> []
| [x] -> []
| x1::x2::rest -> (x1, x2)::(pairs rest)
于 2010-09-24T10:35:12.550 に答える