1

私は、n個の演算子を指定してテーブルを生成する関数を作成するという任務を負っています。真理値表はリストに含まれている必要があり、テーブルの各行は(メインリスト内の)個別のリストに含まれている必要があります。

解決策に再帰が含まれていることは知っていますが、それを完全に理解することはできないようです。

誰かが私を助けることができますか?これは、割り当てのごく一部にすぎません。

4

3 に答える 3

2

頭のてっぺんから考える最も簡単な方法は、2 ^ nをバイナリに変換してカウントダウンし、出力をリストに変換することです。

つまり、n = 3の場合:

真理値表:

a b c
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

2 ^ 3 = 8、8(バイナリ= 1000)、1000-1 = 111から開始し、0まで下げて、出力を記録し、出来上がり!

于 2012-04-23T03:22:31.147 に答える
1

hkfによる質問の解釈が正しければ、これはRacketで機能するはずです。

#lang racket

(define (generate-table n)
  (if (zero? n)
      '(())
      (for*/list ((y (in-list (generate-table (sub1 n))))
                  (x (in-list '(0 1))))
        (cons x y))))

次のように使用します。

(generate-table 3)
> ((0 0 0) (1 0 0) (0 1 0) (1 1 0) (0 0 1) (1 0 1) (0 1 1) (1 1 1))
于 2012-04-23T03:32:48.847 に答える
1

N個の演算子すべてがANDやORなどの二変数であると仮定しましょう。

;; Common Lisp

(defun truth-tables (ops)
  (loop for op in ops
        collecting
          (loop for args in '((nil nil) (nil t) (t nil) (t t))
                collecting (eval `(,op ,@args)))))

(truth-tables '(and or xor)) ->  ((NIL NIL NIL T) (NIL T T T) (NIL T T NIL))

これはあなたにアイデアを与えます。さて、ここではサブリストとして「真理値表の各行」はありません。AND、OR、XORの真理値表の列がそれぞれあります。入力変数の組み合わせは暗黙的に残されます。すべての3番目のエントリがに対応することがわかります(<op> t nil)。問題の説明はあまり明確ではありません。

ご覧のとおり、動的に評価される生成されたコードを介してLisp演算子を使用して不正行為を行いました。

于 2012-04-23T21:40:02.043 に答える