私は人工知能のコースにいて、書くプログラムを与えられました。プログラムは明らかに単純で、他のすべての学生は Java でそれを行いました。ただし、LISP でより少ない作業で実行できることはわかっています。良い。タイピングが少ない。しかし、私は LISP について読んでから 1 週間が経ちましたが、これには驚かされます。私はもっと学び、この授業以外にも LISP を使用することを決意しています。私は 23 歳で、1958 年に形成された言語を学んでいます。それはちょっとロマンチックです。ペストのようにマウスパッドを避けるのがとても楽しいです。
彼が与える例は、プログラム全体を物語っています。彼は、prog ではなく再帰を使用していると述べています。少なくとも、それが何を意味するかは理解しています。
(rewrite '(or a (and b (not (or c d)))))
--> (OR A (AND B (AND (NOT C) (NOT D))))
(rewrite '(and a (or b (not (and c (and d e))))))
--> (AND A (OR B (NOT C) (OR (NOT D) (NOT E)))))
ド・モルガンの法則が分かりました。これをどのように処理すればよいかわかりません。私がこれまでに持っているのは... 恥ずかしいです。私のノートは、これを描こうとしている私のページでいっぱいです。最も単純なケースでの最も近い試みを以下に示します。
(not (or a b))
これを処理できれば、あとは問題なく処理できると思います。多分。ブームと呼ばれる関数を作成しました。上記のステートメントは、ブーム可能リストと呼ばれるものです。
(defun boom (sexp)
(let ((op (car (car (cdr sexp))))
(operands (cdr (car (cdr sexp))))))
(if (equal op 'and)
(setcar sexp 'or)
(setcar sexp 'and))
(print operands)
(print sexp))
;end boom
デバッグのために最後に出力します。リストオペランドへの変更は、元のsexpの変更を反映していません(私にとっては大きな失望です)。
私が持っているものは偽物だと言って、私を導いてください。