0

これは宿題であり、ループやグローバル変数を使用することは許可されていません。

基本的に関数は次のようになります

(defun pairs (1 4)

そのようなリストを作成し、(1 2 3 4)可能なすべてのペアを見つけるので、 を返す必要があり((1 2) (1 3) (1 4) (2 3) (2 4) (3 4))ます。私が試したすべてのコードでは、すべてのペアリングが得られるわけではありません。通常は、(1 2) (2 3) (3 4). (= m n)また、基本ケースが whenまたはであるべきかどうかもわかりません(= (1- m) n)

4

1 に答える 1

2

あなたのソリューションで使用できる可能性は低いmapconので、次のコードが宿題の答えを与えているとは思えません。ただし、何mapconが機能するかを読み、それを実装する方法を理解すれば、以下を解決策のガイドとして使用できます。

(defun pairs (list)
  (mapcon (lambda (tail)
            (mapcar (lambda (y)
                      (list (first tail) y))
                    (rest tail)))
          list))
CL-USER> (pairs '(1 2 3 4))
;=> ((1 2) (1 3) (1 4) (2 3) (2 4) (3 4))

ここでの考え方は、元のリストの末尾を再帰したい場合です。つまり(1 2 3 4)、それからいくつかのペアを検討(2 3 4)して生成し、次にそれからいくつかのペアを検討して生成し、次に(3 4)、次にそれからいくつかのペア(4)(の空のセット) を生成します。

(1 2 3 4) → [1, (2 3 4)] ↦ ((1 2) (1 3) (1 4))
  (2 3 4) → [2,   (3 4)] ↦ ((2 3) (2 4))
    (3 4) → [3,     (4)] ↦ ((3 4))
      (4) → [4,      ()] ↦ ()

次に、((1 2) (1 3) (1 4))、((2 3) (2 4))、((3 4))、および () をまとめて ((1 2) を得る必要があります。 (1 3) (1 4) (2 3) (2 4) (3 4))。

于 2013-11-14T20:05:50.050 に答える