Common Lisp

executor

外部の実行可能プログラムを起動するためのライブラリ。 処理系毎の違いを吸収してくれます。http://www.cliki.net/executorいまのところ「ドキュメントはソース」かつ対応実装はSBCLのみの様です。 外部コマンドの実行 execute 基本的な機能。パス検索もな…

slime + auto-complete

ググッても誰もやってなさそうだったので。id:m2ymさんのauto-completeをslimeで使ってみる試み。auto-completeインストール後、.emacsに以下を追加。 (defvar ac-slime-modes '(lisp-mode)) (defun ac-slime-candidates () "Complete candidates of the sym…

sheepleでディスパッチ

sheepleはCLOSの総称関数の様なディスパッチ機構を持っています。まず、「メッセージ」を定義し、「メッセージ」への各オブジェクトの「応答(reply)」を定義していきます。 「メッセージ」がCLOSの総称関数、「応答」がCLOSのメソッドにあたります。 (defmes…

sheepleでオブジェクトを作る

CLikiのRecent Changesを購読していると、色々なプログラムの更新が分かります。今日はsheepleというオブジェクトシステムについての記事が更新されていました。http://www.cliki.net/Sheeple http://common-lisp.net/project/sheeple/asdf-installでインス…

CLOSでslotにアクセス

自分は、CLOSでメソッドを書いてるとwith-slots/with-accessorを多用します。 slotが増えてくるとめんどいので、with-all-slotsなるモノがあればいいなと妄想。 sbclで実装してみました。slotを確定させるためにクラスを明にfinalize-inheritanceしないとな…

ClojureのtrampolineをCLで

Programing Clojureを読んでいたところ、相互再帰のためのツールとしてtrampolineという関数が紹介されていました。クロージャが返される限り、返されたクロージャを呼び続ける関数のようです。現状のClojureは末尾呼び出しの最適化を行わないため、trampoli…

リストの破壊的な操作

g000001さんの所のネタ。 http://cadr.g.hatena.ne.jp/g000001/20090521/1242909362alistからplistへの破壊的な変換。やってみたら、とっても直接的になった。 (defun nalist-to-plist (alist) (loop for x on alist by #'cddr do (let* ((cons1 x) (cons2 (…

->とcut

l4u!の->演算子ってどんなだったかなと思い出しながら書いていたら、全く別物になってしまいました。 >がブロックをつくり、直前の式の評価値が、次の式の最後に暗黙的に渡されます。 (-> (list 1 2 3) (princ) (mapcar #'(lambda (x) (+ x 10)))) ;; (1 2 3…

今週末はPAIP読書会

あっという間に1ヶ月以上経っている。 今回からAIの部分に入ります。ちょっと流し読みしておこう。

PAIP読書会

2ヶ月くらい放置してしまいましたが、今週末からPAIP読書会が再会するようなので、これを機にまた更新していきたいと思います。

Ex5.4〜Ex5.6 ELIZAの改良問題

ELIZAの改良問題を3つ ;; Exercise 5.4 [s] We mentioned that our version of ELIZA cannot ;; handle commas or double quote makes in the input. However, it seems ;; to handle the apostrophe in both input and patterns, Explain. commaやdouble q…

Ex5.2 Elizaで遊んでみよう

;; Exercise 5.2 [m] Experiment with this version of ELIZA. Show some ;; exchanges where it performs well, and some where it fails. Try to ;; characterize the difference. Which failures could be fixed by ;; changing the rule set, which by c…

5.4 Elizaプログラム

5.4節で、ELIZAを組み上げます。置き換えルールは以下のように定義します。 ルールセットはルールのリストで表現 ルールは(pattern . responses)で表現 動作の概要は以下のようになります。 ユーザからの入力は(read)でシンボルのリストとして読み込む 入力…

5.3 Segmentパターンマッチ

この節ではパターンマッチに複数の単語にマッチさせる変数を導入しました。Segmentパターンは"(?* var)"の形で表し、以下のように使います。 ((?* ?x) is (?* ?y)) このパターンを '(this is a pen)とマッチさせると、 ((?x . this) (?y a pen)) とマッチし…

5章 ELIZA 5.2とEx5.1

Ex4.5〜Ex4.7は[d] ratingなのでさすがに難しいです。Ex4.6で5,6章でパターンマッチングについて勉強してこいと言われたので取りあえず先に進みます。 5.1 ELIZAの記述と明確化 ELIZAは入力されたシンボルのリストとあらかじめ用意しておいたルールセットに…

colorizeをインストール

http://www.cliki.net/colorize をSBCLにインストール。asdf-installでインストールしようとしたところ、パッケージが見つからないと言われたので、手動でインストールします。 bash-3.2$ svn co svn://unmutual.info/colorize bash-3.2$ cd ~/.sbcl/systems…

hyperspecをanythingから引く

突発性CL勉強会で小耳に挟んだanything.el。結構有名な機能だったのですね。 使ってみたところ、さっそくハマりました。これは便利。練習がてら、hyperspecをanythingから引く設定を定義しました。思いもしなかったシンボルとかが引っかかって結構面白いです…

Ex4.5 WarrenのWARPLAN その1

;; Exercise 4.5[d] Write a planning program that, like Warren's ;; WARPLAN, keeps track of the list of goals that remain to be done as ;; well as the list of goals that have been achieved and should not be ;; undone. The program should nev…

Ex4.4 The Not Looking after You Don't Leap Problem. その2

ヒントの通りにachieveに引数を追加します。これをappropriate-opsからappropriate-pまで伝播させます。 appropriate-pでいずれかのprotected-goalが削除される場合、適用出来ない様にします。 achieveはachieve-eachから呼ばれているので、achieve-eachも修…

Ex4.4 The Not Looking after You Don't Leap Problem. その1

4章で定義してGPSは最初に見つけたパスでゴールを達成しようとするので、別のオペレータの組み合わせではゴールが達成可能でもそっちは参照しない問題があります。 これを修正するExerciseです。 ;; Exercise 4.4[h] The Not Looking after You Don't Leap …

突発性CL勉強会1回 SLIMEについて

突発性CL勉強会でSLIMEについて勉強。 id:g000001さん、id:mokeheheさん、NANRIさんとid:tszの4人で実施。 新宿大ガード横店は改装工事をしていたので、近くの別店に移動しました。 新宿のルノアールで7時間実施。SLIMEの話題自体は2〜3時間で終わりましたが…

EX4.3 GPSを「うっかり目標達成」に対応 その1

4章で定義したGPSは複数の目標を指定した場合、ある目標達成によって他の目標が部分的に達成できる場合をうまく扱っていない。これを修正する問題。まずは、その様なシチュエーションをオペレータのセットで定義する。 ;; Exercise 4.3[h] GPS does not reco…

4章の問題

PAIPも4章からは、結構規模の大きいプログラムを扱うようになってきたのでどうしようか模索中。 日記に貼れる大きさじゃ無くなってきたなぁと。 取りあえず勉強もかねて、3章までに定義した関数と4章で定義したGPSをdefpackage化してみる。

Ex4.2 順列の生成

リストを取って、その全ての順列を生成する関数を定義する。 ;; Exercise 4.2[m] Write a function that generates all permutations of its input. (defun map/rest (func list &optional (acc nil) (results nil)) (if (null list) results (map/rest func…

Ex4.1 formatの問題2

PAIPも4章に入るといよいよAIの内容に入ります。4章ではExerciseは章末にまとまっています。Ex4.1は章中で定義した、デバッグ用の表示関数dbgを formatディレクティブだけで表現してみようというモノです。章中の定義は以下のように行ってました。 (defvar…

EX3.13 format

formatを使って、単語のリストを取り文として表示する。 その際、 formatは1度だけ呼び出す 先頭の単語の、先頭の文字は大文字に、それ以外は小文字にする。 最後の単語の後ろにはピリオドを打つ を行う。リファレンスを見たけど複雑過ぎてわからない。~@( …

Ex3.10 lcmとnreconcは何をする関数?

lcmとnreconcの機能をマニュアルを使って調べる問題。 今更ながらslimeとHyperSpecがあると便利。hyperspec-lookupをキーバインドしておくとなお便利。 (global-set-key "\C-cH" 'hyperspec-lookup) 調べた結果は、lcm: 最小公倍数を求める関数 nreconc: rev…

Ex3.9 reduceを使ってlengthを定義

reduceを使って、リストの長さを求める問題です。 SBCLの場合ignoreをつけないと、コンパイラに文句を言われました。 ;;; Exercise 3.9 [m] White a version of length using the function ;;; reduce. (defun my-length (list) "リストの長さを求める。redu…

Ex3.11 キーと値と連想リストを取って、キーと値のペアを含む連想リストを返す関数の名前は?

3.10に続き、調べ物問題。答えは、acons。 ;;; Exercise 3.11 [m] There is a built-in Common Lisp function that, ;;; given a key, a value, and an association list, returns a new ;;; association list that is extended to include the key/value ;;…

Ex3.8 もしrightmostのkeywordパラメタの値が有効だったら

Ex3.8のちょっと前で定義したfind-allをKCLのパラメタバグに対応する問題。前で行ったfind-allの定義は以下の通り。 (defun find-all (item sequence &rest keyword-args &key (test #'eql) test-not &allow-other-keys) "Find all those elements of sequen…