3

ペアを渡すことによってボード上のチェスの駒に合法的な移動を適用する移動手順があります:(conssource dest)したがって、(cons 1 2)はボードから位置1の駒を取り、それを位置2に移動します。

以前と同じ動きを適用する手順を作成しようとしています。やってみた

(move(reverse move))これは(cons 2 1)を通過し、それによってピースを戻します。

残念ながら、リバースはペアでは機能しません。最後にnullに対応するために多くのコードを変更する必要があるため、リストに変換できません。

誰かが何かを考えることができますか?ちなみに私はMITスキームを使用しています。

4

3 に答える 3

1

これには独自の手順を実装する必要があります。reverse-pairこれは次のように簡単です。

(define (reverse-pair p)
  (cons (cdr p) (car p)))

または、これは少し凝っていますが、読みにくくなっています。

(define (reverse-pair p)
  `(,(cdr p) . ,(car p)))

どちらの方法でも、意図したとおりに機能します。

(reverse-pair '(1 . 2))
=> '(2 . 1)
于 2012-12-02T15:04:08.717 に答える
0

逆関数がペアで機能しない場合は、独自の逆ペア関数を作成してください。そのためのスキーム構文は覚えていませんが、基本的にペアから2つの値を読み取る方法(「move」関数ですでに行っていること)を知っている必要があるため、そのためのツールはすでにあると思います。次に、そのデータに基づいて新しいタプルを構築する方法。

なぜこれが物事を複雑にしすぎると思うのかわかりません。新しい関数の外側のコードに関する限り、「逆」関数を使用して提案した元のバージョンとまったく同じように見えます。

于 2012-12-02T13:49:23.557 に答える
0

`(a .b)のペアに制限すると、それらを反転させるのは非常に簡単です。と同じくらい簡単なもの

(define reverse-pair
  (lambda (p)
    (cons (cdr p) (car p))))

それをします。あなたの文脈から、私はあなたがあなたが持っている位置にいるつもりはなく、'(1 2 3 4 . 5)それを逆転させる必要があるので、あなたは上記のものでうまくいくはずだと思います。

于 2012-12-02T14:00:33.863 に答える