#:g1: cl-logicの紹介

Posted 2014-10-06 18:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の280日目です。

cl-logicとはなにか

 cl-logicは、Mikhail Klementyev氏作の論理式を扱うライブラリです。

パッケージ情報

パッケージ名cl-logic
Quicklisp
Quickdocscl-logic | Quickdocs
CL Test Grid: ビルド状況cl-logic | CL Test Grid

インストール方法

(ql:quickload :cl-logic)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 名前からすると、論理プログラミングのDSLかなにかと思ってしまいますが、そうではないようです。
ソースを眺めても説明がないのでどう使うのかと思いましたが、ソース中の定義を眺めると、

(defun ¬ (p) "Инверсия, uac" (not p))

(defun(p q) "Конъюнкция, u2227" (and p q))

(defun(p q) "Дизъюнкция, u2228" (or p q))

(defun(p q) "Импликация, u2192" (or (not p) q))

(defun(p q) "Сложение по модулю 2, u2295" (not (equal p q)))

(defun(p q) "Эквивалентность, u223c" (equal p q))

(defun(p q) "Штрих Шеффера, u2191" (not (and p q)))

(defun(p q) "Стрелка Пирса, u2193" (not (or p q)))

(defun(p list) "Предикат всеобщности" (every p list))

(defun(p list) "Предикат существования" (some p list))

こんな感じのものと、エクスポートされている、infix->prefixがあるので、

(progv '(p q) '(t t)
  (eval (infix->prefix '(¬ (p ∨ q) ∼ ¬ p ∧ ¬ q))))
;=>  T

推測するに、こんな感じに使うのではないでしょうか。

まとめ

 今回は、cl-logicを紹介してみました。
Quicklispの中にはテストケースがないものも多いですが、使い方さえ分からないものが結構あります。
Quicklispにライブラリを登録する場合には、せめてテストケースと用例位は付けましょう。

comments powered by Disqus