パターンマッチング技術を使用して、リスト内のすべての要素のペアを再帰的にスワップする必要があります。したがって、[1, 2, 3, 4, 5]
は[2, 1, 4, 3, 5]
を返します。私が発見したパターンマッチングを使用してリスト内の要素のペアを交換する
2つのこと:
List.length
:長さを返します。これは、偶数/奇数リストを処理するのに役立ちます。List.nth
:リストの指定された場所に値を戻します。drop.(list, i)
:最初の要素が削除された後に値を返す。
これらの3つのことを使って、いくつかの再帰メソッドを見つけ出すことができますが、パターンマッチングの側面はわかりません。以下はパターンマッチングのない擬似コードです。
function(list):
var a = first on list
var b = second on list
// odd case
if(b = null | "")
{
list = drop.(list, 1) @ a
}
// even case
else if(b = "" & a = "")
{
list = list
}
// recursive case
else
{
list = function(drop.(list, 2) @ b @ a)
}
これは、本質的に、リストをループペアを交換し、リストの末尾に(連結)それらを配置し、それがすべてのペアを経験してきたまで再帰的にこれを繰り返して開始することができます。
興味深い宿題のような音です。あなたはそれをどのように解決しようとしていますか?おそらく、あなたは解決策に向かって努力を共有し、より焦点を絞った質問をすることができます。 –
forループについて考えているなら、機能的に考えるのではなく、パターンマッチングに関して考えていません。確かにあなたの教科書には、パターンマッチングを使って定義されたリストの再帰関数の例があります。そのような例をエミュレートしてみてください。 –
パターンマッチング関数から始めましょう。 'nth'や' take'や 'drop'ではなく、パターンだけがリストの最初の2つの要素を返します。 (2つ以下のときに何をすべきか考えてみましょう;あなたは1つ以上の節が必要です)。その後、残りのリストに再帰を追加します。 – molbdnilo