Hatena::Groupcadr

bulbのLisp日記 RSSフィード

2008-01-08

[][][]2.2 22:45 2.2 - bulbのLisp日記 を含むブックマーク はてなブックマーク - 2.2 - bulbのLisp日記

いきなり意味がわからなかったため答えを見る。

あぁ、明示的に終端と非終端を区別せよか。

答えは以下。

(defun generate (phrase)
  (cond ((listp phrase)
	 (mappend #'generate phrase))
	((non-terminal-p phrase)
	 (generate (random-elt (rewrites phrase))))
	(t
	 (list phrase))))

(defun non-terminal-p (category)
  (not (null (rewrites category))))

#|
CL-USER> (generate 'sentence)
(THE WOMAN TOOK A WOMAN)
CL-USER> (generate 'sentence)
(A WOMAN HIT THE TABLE)
|#