0

sml では、l::ls によって整数または文字列のリストを引数として定義します。これは、任意の長さのリストを定義するのに役立ち、= または > または < と比較できます。同様の方法でタプルをどのように表すことができますか? たとえば、私は書くことができます、

fun delete(x,l::ls)=if x=l then delete(x,ls) else l::delete(x,ls)

タプルについても同様に書くにはどうすればよいですか?

タプルの個々の要素を比較する必要さえあることに注意してください。つまり、(a1,b1)>(a2,b2) if b1>b2 なので、上記のように単純に削除できるソートカットでは十分ではありません。

たくさんのありがとう。

4

1 に答える 1

1

通常の形式を使用して、タプルに対して直接パターンマッチングを実行できます(x, y)

関数deleteはどの関数でも機能する'a listため、タプルのリストにも適切です。タプルの最初の値に基づいてリストをフィルタリングする例を次に示します。

fun deleteByFirst(x0, []) = []
  | deleteByFirst(x0, (x, y)::ls) = 
    if x = x0 
    then deleteByFirst(x0, ls) 
    else (x, y)::deleteByFirst(x0, ls)
于 2012-10-19T21:51:20.923 に答える