2008-01-01から1年間の記事一覧

->とcut

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

Gauche/Kahuaセミナー2008 Fallに行ってきました

Gauche/Kahuaセミナー2008 Fallに行ってきました。http://practical-scheme.net/wiliki/wiliki.cgi?Seminar%3aGauche%2fKahuaセミナーの内容は以下のものでした。 HOPプロジェクトの説明(山下さん) Gauche on Railsの内部実装の解説(吉田さん) Kahuaの内部実…

今週末は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…

Ex3.7 キーワードパラメタの優先順位

;;; Exercise 3.7 [s] Why do you think the leftmost of two keys is the ;;; one that counts, rather than the rightmost.同じキーのキーワードパラメタが複数個指定された場合、左端のキーの値が有効となる理由を問う問題。rest パラメタの値に、キーワ…

Ex3.6 スペシャル変数と通常の変数

;;; Exercise 3.6 [s] Given the following initialization for the ;;; lexical variable a and the special variable *b*, what will be the ;;; value of the let form? (setf a 'global-a) (defvar *b* 'global-b) (defun fn () *b*) (let ((a 'local-a)…

Ex3.5 20の質問

データ構造をプログラムから書き換える問題。 推論に失敗する度に、ツリーが拡張されていく。 ;;; Exercise 3.5 [h] (Exercise in a altering structure.) Write a ;;; program that will play the role of the guesser in the game Twenty ;;; Questions. T…

Ex3.4 リストを表示

printの様な関数を作成する。ドット対表記が必要ないところは通常のリスト表記で表示する。結構力業。 ;;; Exercise 3.4 [m] Write a function that, like the regular print ;;; function, will print an expression in dotted pair notation when ;;; nece…

Ex3.3 ドット対でリストを表示

問題ではprincを使えと書いてあるけど、writeで実装した。 せっかくなので作成する関数も元のリストをconsし直して返す様にしてみた。 ;;; Exercise 3.3 [m] Write a function that will print an expression in ;;; dotted pair noteation. Use the bulit-i…

Ex3.1 let*をlambda式に書き換える。Ex3.2 cons関数を特別なケースと見なせる関数は?

;;; Exercise 3.1 [m] Show a lambda expression that is equivalent to ;;; the above let* expression. You may need more than one lambda. (let* ((x 10) (y (+ x 20))) (list x y)) (funcall #'(lambda (x) (funcall #'(lambda (y) (list x y)) (+ x 20…