3

ねえ、SMLとプログラミングにまったく慣れていないので、リスト内で結合する関数を作成したいと思います。たとえば、[x1、x2、x3、x4、...] = [(x1、x2)、(x3、x4) 、...]正しい方向に進むためのヒントや助けをいただければ幸いです。

4

2 に答える 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 に答える