2

smlの学習を始めたばかりなので、私が引き起こす可能性のある不快感を許してください。

さて、ここに私の機能があります:

fun swapPairsInList [(x,y)]
swapPairsInList: (’x * ’y) list --> (’y * ’x) list

リスト内のペアを(再帰的に)交換する方法は知っていますが、問題が発生しているのは、リストが空(null)の場合の基本ケースです。このリストがnullかどうかを正確に確認するにはどうすればよいですか? 私は試した

null [(x,y)]

しかし、それは例外をスローしているだけです。この問題を解決するためにパターン マッチングを使用する必要がありますか?

4

2 に答える 2

3

今後の参考のために:

fun swapPairsInList []            = []
  | swapPairsInList ((x,y)::tail) = (y,x) :: swapPairsInList tail

パターン[]は空のリストに一致します。

もちろん、map や foldl などの高階関数を使用する方がはるかに優れています。

于 2013-04-11T12:06:24.853 に答える
1

さて、私はそれを理解しました.ListPair構造にあるマップ関数を見たら、間違った角度から問題を攻撃していました.

新しいコード:

fun swap (x,y) = (y,x);
fun pairSwap l = map swap l;
于 2013-04-07T20:04:00.857 に答える