Lisp

The Little Schemer 第七章

さて、 The Little Schemer の第七章は "Friends and Relations" 。 この章の内容を一言で言うと、「小さなツールを作っておくと論理がよく見えるようになる」。要するにボトムアッププログラミングの有効性についてだ。 それから、主題には出てこないけれど…

The Little Schemer 六章

The Little Schemer 六章の主題は抽象化。 (1 + 2) って式を (+ 1 2) と表すことだって可能だよね、と言う話から始めて、抽象化したプログラムの書き方を勉強していく一連の流れは見事。 最終的には(() () ())で3を表すような系を構築しようっていう話にな…

The Little Schemer 五章

The Little Schemer 五章の内容は、 ツリー構造のcar・cdr下り 関数の簡略化 の二つ。 一つ目は、car部がatomでない場合のリストの下り方について。目新しいのは、carがlistかatomかで条件分けする必要があるってことくらい。 二つ目は、条件が複雑になった…

The Little Schemer 四章

The Little Schemerの四章は、add1やsub1から自然数の+を定義したりする。数学的ですね。 数学的なのは良いんだけど、末尾再帰とかやってないからか、とにかく遅い。5の4乗(625)とか計算させるだけでxyzzyが20秒程度停止する。 プログラム書いてる途中に…

The Little Schemer 三章

The Little Schemerを読み始めたので、その中の関数をCommon Lispで書いてみる。 三章。 rember (Remove mEMBER) 。 (defun rember (a lat) (cond ((null lat) nil) ((equalp (car lat) a) (cdr lat)) (t (cons (car lat) (rember a (cdr lat)))))) (rember …

まくろちゃれんじ!setf編(第五+3/4話)

setfのLisp内での定義を知ることが出来れば作ることも容易になるだろうと思い、GCLのソースを見てみた。 setf.cなんて言う、そのまんまなファイルを見つけた。 どうやらソース自体はC言語らしく、残念ながらLispでの定義を見ることは出来ないみたいで残念だ…

メモメモ。

カンマアットは、「バッククオートによる保護をキャンセル(多くの場合これは評価することと同様)してから外側のカッコを外す」であって、「カッコを外してから評価する」ではないんだね。 (declare (ignore hogehoge)) ってのは、局所変数としてhogehogeを…

まくろちゃれんじ!setf編(第五話半)

前回のコードはletが二重になっている。これは私には少し変だなーと感じられた。だってさ、letでしたいことって局所変数を定義することだけでしょ?ならlet直下にletがあることには意味はない。一つのletで済むはずだから。 ならやってみろ、おうやってみよ…

まくろちゃれんじ!setf編(第五話)

setfを、get-setf-expansionを用いて書いてみよう!という目標を立てていたのが本連載、「まくろちゃれんじ!setf編」ですが、どうやら今回は成功したようです。 参考サイトはここ→[代入を簡略化するマクロ] 上記サイトのour-pushの論理をほとんどそのまま…

SLIMEを完全に終了させよう。

Emacs上でSLIMEを起動するのはかんたん。M-x slime と命令するだけでOKだ。 けど終了させるときはどうだろう。 まず、Emacsじたいの終了は最悪の結末をもたらす。これまで何度か起こっているように、lisp-runプロセスがEmacsという親プロセスを無くして暴走…

シャープクオートとクオートの違い

http://www.mew.org/~kazu/doc/elisp/function.html たまたま検索にひっかかったページ↑。#'と'とが(C言語レベルでの)実装が同じであったとは衝撃でした。確かに(意味合いは違っても)どっちでも動くよなあと何度か疑問に思ってましたが、まさか同じ実装…

まくろちゃれんじ!setf編(番外編)

今日はネットワークをやろうと思ったものの、なんか本を読んでいたら飽きてしまったのでその後はずっとsetf関連です。 まとめた情報を書くのにはもう少し時間が必要なので、今のところはちょっとだけ情報発信。メモしてた内容をそのままコピペです。 この式…

on Lisp

On Lisp むしゃくしゃして買った。後悔はしていない。

魔法言語 リリカル☆Lisp

魔法言語 リリカル☆Lisp ぎゃああああーーー! こ…こんなものが出ていたのに見逃してしまうなんて…なんたる失態!! しかも、グループ名が「λ組」て。

(関数)と(関数 nil)の違い

(関数)と(関数 nil)との違いなんて、考えられることなんてこれしかないわけで、まあ確かめてみれば実に明らか。 まずはリストかどうか確認です。 > (listp '(func)) t > (listp '(func ())) tはい、これくらいは通過しますよね。そりゃあね。 で、本命のcdr…

ちょっとだけ試してみた。

せっかくコメントとトラバをいただいたので、少しだけ慣習と仕様と文法を確かめてみた。 ;;表示・非表示が交互に変わる (tool-bar-mode) (tool-bar-mode nil) (menu-bar-mode nil) ;;引数がおかしい、とエラーになる (menu-bar-mode) ;;へんじがない ただの…

CLISPとSBCLをSLIMEで選択的に使用しよう

id:hayamizさんからもらったコメントでdefine-setf-expanderとget-setf-expansionを知った。 その途中でdefsetfなる関数も発見して試していたのだけれども、どうも何かおかしい。以下のURLの例が、エラーを吐いて動かない。 http://franz.com/support/docume…

まくろちゃれんじ!setf編(第四話)

学校に行ってsetfの内容についてGuy Steeleの本を見て調べてみたのだけれども、原著に当たっても邦訳を見ても同じことしか書いてない(当たり前)。 すなわち、アクセス関数とその更新関数がどうのという話しか載っていない。 あるアクセス関数があって、そ…

SBCL + SLIME 環境

2007年08月26日 すーじー 追記。 どうやらslimeの設定を知りたい方の検索に引っかかってるらしいので、参考までに私の使っている.emacs.elの設定だけ書いておきます。ちゃんとしたところを見た方が役に立つと思いますけどね。 一行目はslimeフォルダのロケー…

まくろちゃれんじ!setf編(第3話)

setfマクロの実装は、今の段階ではちょっと無理そう。手作業である程度作れないこともないだろうけど…。 setfの仕事の内容をもう一度まとめてみる。 まず、外側から見た仕事は「あるアクセスにおいて評価されるはずの内容を他のものに変更する」というもの。…

まくろちゃれんじ!setf編(中)

色々工夫してみた結果、少しマシになった*1 (defmacro my-setf (obj val) (if (symbolp '(eval obj)) `(setq ,obj ,val) `(progn (rplaca ,obj ,val) ,val))) が、これまで無視していた問題が顕れた! > (macroexpand-1 '(my-setf (car x) 344)) (progn (rpl…

まくろちゃれんじ!setf編(前)

工場見学時にはやみずさんから入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算をいただいた。わーい。でもLispの勉強は基本的にネットだったりする罠。 今日はマクロについて少しだけ勉強。macroexpandなんていう面白い関数を知ったので、ちょっと実験しま…

大学3年生による、自然数のケタ数求め

ある自然数が変数nに入っている。nは何桁の数かを求めるプログラムを書け。 自然数の桁数 - 日記を書く [・w・] はやみずさん のところで書かれていた内容↑ を見て、真っ先に考えた内容が、以下のコード。 ketasu(int n){ int i; for(i=0; n>0; i++) n /= 10…

構造木構文木

Lispの木は構造木構文木なんだって偉い人が言ってた。ショックだった。 そして、それゆえにLispは強力なんだって聞いて、なんだか納得してしまった。 もちろんソースは Hackers&Painters。 どうでもいいけど、この題名って Linkers&Loaders と似てる。

うんうん

日記にまだ書いてないと思うけれども、「記号型ってのは参照に似てるっぽい」という理解は間違ってなかったようです。 > (setq y 11) 11 > (set 'x 'y) y > x y > (eval x) 11 > (setq y '(11 22)) (11 22) > (eval x) (11 22) 確認してみた↑ yの記号型をxに…

具象と抽象

これでおしまい。とか言っておきながら延々書いている。 Lispで出てくるものの実装をふと気にしてしまうことが多々あるんだけど、そのたびに「いやいやLispはCとは違うんだ、大事なのはデータの流れなんだ、どこにデータがあるかじゃないんだ」なんて考えて…

関数型プログラミングは、なんだか「当たり前」な感じがする

オブジェクト指向的なプログラミングでも、エレガントにやろうとすることを考えると、関数型言語の手法に似たことをやっている気がする。 逆に、学校の課題とかをとりあえず済ませちゃおうとするときに使う、「あー今すっげー汚いことやってんなー」と思って…

関数も型の一つです

関数も型の一つなので、変数に関数を関連づけることが出来る。オーケー、わかったよ。 例えば下のように。(on Lispからの抜粋) > (setq x #'append) #<Compiled--Function 46B4BE> > (eq (symbol-value 'x) (symbol-function 'append)) T むむ…変数が関数を型に持つと言うことと、先ほ</compiled--function>…

on LispのPDF版を読む

昨日印刷しておいた、on LispのPDF版を読んでる。 初めのうちに感じていた取っつきにくさは、だんだんと気にならなくなってきた。この本、エッセンシャルな説明だからか、しっかり読むとすごく面白い。 名前が関数呼び出しの先頭かシャープクオートの次に来…

Practical Common Lisp 読書会 第三回

Practical Common Lisp 読書会も第三回。いよいよプログラム書きに入った。 一つ一つ確かめながら組んでいくプログラムは、効果がすぐさま分かって面白い。 またC言語よりも記法が楽だと言う人の気持ちも分かる。 関数の最後にコッカが連続して出ることがた…