(ql:quickload '(:trivia :trivia.quasiquote)) (use-package :trivia) ; パターンマッチ用マクロ (named-readtables:in-readtable :fare-quasiquote) ; パターンにquasiquote ` を使える (defun NNF-DNF (condition) ;; 論理式をとって、継続渡しスタイル(cps)の関数を返す。 ;; OR 節はイテレータになる。 (ematch condition (`(or ,@rest) ; list の 最初の要素がorのとき (let ((restk (mapcar #'NNF-DNF rest))) ; 要素ごとにcps関数を作って (lambda (k) ; 関数自体もcps関数を返す ;; calls k for each element (do
![CPS変換風のやり方で NNF(否定標準形) を DNF(選言標準形) に変換する - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/e348d7bdacafa0e52e40142c37f6b69195416aac/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9Q1BTJUU1JUE0JTg5JUU2JThGJTlCJUU5JUEyJUE4JUUzJTgxJUFFJUUzJTgyJTg0JUUzJTgyJThBJUU2JTk2JUI5JUUzJTgxJUE3JTIwTk5GJTI4JUU1JTkwJUE2JUU1JUFFJTlBJUU2JUE4JTk5JUU2JUJBJTk2JUU1JUJEJUEyJTI5JTIwJUUzJTgyJTkyJTIwRE5GJTI4JUU5JTgxJUI4JUU4JUE4JTgwJUU2JUE4JTk5JUU2JUJBJTk2JUU1JUJEJUEyJTI5JTIwJUUzJTgxJUFCJUU1JUE0JTg5JUU2JThGJTlCJUUzJTgxJTk5JUUzJTgyJThCJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz1kYjEzMjVmNDVmOGRiMDZkMDQ2NzQ5YzFiZDZmN2EyOQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBndWljaG8yNzE4MjgmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTM4YjBhMWY5NjRiYTI5ZjU1ZTFkMGYxNmQ2OGRlZDU4%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Dbbbea01ebd8453df4123424d2a734667)