2010/04/29

TSS TLS atom?

無駄に複雑に書き直した話。

The Little Schemer, 4th Edition と The Seasoned Schemer に出てくる、atom?手続き。


上が本の序文に記載されているもので、下が書き直したもの。
The Little Schemer, 4th EditionThe Seasoned Schemer

TSS define?

わりとどうでも良い話です。

10章(The Little Schemer, 4th Edition)では、defineのない小さなLisp処理系を作りました。
20章(The Seasoned Schemer)ではdefineのある小さなLisp処理系を作るようです。そこでリストの先頭が(quote define)であるかどうかを判定するdefine?という手続きを作るわけです。
上記のようなコードが記載されています。The Little Schemer, 4th Edition でも The Seasoned Schemerでも、このスタイルです。不恰好ですよね。そこで、もう少しどうにかならないものかと考えてみるわけです。

書いてはみるものの、微妙です。微妙なので取り合えずブログに書いとけ、と思うわけです。ただそれだけです。

追記

そうでしたよ。Common Lispなら、こんなどうでも良いこと気にもならんのですよね。


The Little Schemer, 4th EditionThe Seasoned Schemer

On Lisp と Let Over Lambda のコード

配布されているソースなど。

例えば...



LET OVER LAMBDA Edition 1.0On Lisp

Lisp - Free Programming Books

メモメモ。

Lisp



212. An Introduction to Programming in Emacs Lisp
       Robert J. Chassell | Free Software Foundation, Inc.
       Published in 2002, 314 pages
213. Basic Lisp Techniques
       David J. Cooper, Jr. | Franz Inc.
       Published in 2003, 100 pages
214. Casting Spells in Lisp
       Conrad Barski | Lisperati.com
       Published in 2008, 26 pages
215. Common LISP: A Gentle Introduction to Symbolic Computation
       David S. Touretzky | Benjamin-Cummings Pub Co
       Published in 1990, 587 pages
216. Common Lisp: An Interactive Approach
       Stuart Charles Shapiro | W.H. Freeman & Company
       Published in 1999, 358 pages
217. Common LISP: The Language, 2nd Edition
       Guy Steele | Digital Press
       Published in 1990, 1029 pages
218. Design of CMU Common Lisp
       Robert A. MacLachlan |
       Published in 2003, 122 pages
219. Exploring Randomness
       Gregory J. Chaitin | Springer
       Published in 2001, 164 pages
220. Let Over Lambda: 50 Years of Lisp
       Doug Hoyte | Lulu.com
       Published in 2008, 384 pages
221. Loving Lisp, or the Savvy Programmer's Secret Weapon
       Mark Watson |
       Published in 2002
222. Natural Language Processing in Lisp
       Gerald Gazdar, Chris Mellish | Addison-Wesley
       Published in 1989, 533 pages
223. On LISP: Advanced Techniques for Common LISP
       Paul Graham | Prentice Hall
       Published in 1993, 426 pages
224. Performance and Evaluation of Lisp Systems
       Richard P. Gabriel | The MIT Press
       Published in 1985, 294 pages
225. Practical Common Lisp
       Peter Seibel | Apress
       Published in 2005, 500 pages
226. Successful Lisp: How to Understand and Use Common Lisp
       David B. Lamkins | bookfix.com
       Published in 2004, 360 pages

関連


アルゴリズムクイックリファレンス実用 Common Lisp

読んだ「LET OVER LAMBDA Edition 1.0」

やっとLET OVER LAMBDA Edition 1.0を読み終わりました。読み終わっただけで読みこなしていません。コードもほとんど書いていません。まずは7章に必要な分から優先して書いて、7章のForthが動かせるようにしてみたいです。

この本はCommon Lispのマクロの本です。現時点での感想をざっくりと書いてみます。
  • 「schemeの方が好き」 → 「Common Lisp も良いな」と思うようになった
  • むしろ、もっとCommon Lispをやってみたいと思うようになった
  • nil関連がすごく良い
  • Common Lispのコードが読めるようになった
  • 依然Lisp-2よりLisp-1が好きかも
  • 依然ループより再帰が好き
  • 副作用はやっぱり気持ち悪い(なぜか非S式だとそういうことは思わない)
  • マクロに対する抵抗が減った
  • マクロに対する抵抗は減ったが思っていた以上に難しい
  • マクロがある程度読めるようになった
  • マクロにもいろいろあることを知った(リーダーマクロ、コンパイラマクロ・・・)
  • マクロが書ける(ようになれる)気がしてきた
  • マクロすぅぅぅげぇぇぇぇ
  • 書いてみると書けない
  • 書かないと書けるようにはならないだろうと思う
  • マクロが具体的にどう便利で強力なのか見せてもらえた
  • Common Lispの伝統的なマクロを読んでいたらSchemeのdefine-syntaxも読めるよになった
  • 知っているつもりだったクロージャのパワーはまだまだそんなもんじゃなかった
  • 今ならOn Lispが読めるような気がする
著者がすごくCommon Lisp信者です。いたるところで「Lisp最強!!」と仰っています(副音声ですが)。この辺は気をつけて読んだ方が良いと思います。

Lisp/Scheme関連の積読がたくさんあります。次はSICPの続きをやるか、On Lispを読むか、Schemerシリーズの続きを読むか・・・。


LET OVER LAMBDA Edition 1.0On Lisp

2010/04/28

読んだ「入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算」

入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算

@finalfusionさんに頂いた入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算 を読みました。読んでみたかった本です。
入門書とあるように、ガチの入門書でした。Lisp系の言語の経験が全くない人向けだと思います。

8章が唐突にλ計算です。Lispのコードが読めればこちらも問題ないかと思います。8章だけ入門とは無関係のような気がします。だからこのタイトルなのでしょうけど。
Common Lispにしろλ計算にしろ、もっと良い資料がWeb上にたくさん転がっているかと思います。もしくは今ならこちらでしょうか。

そういえばあとがきに計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)が紹介されていました。この本は評判が良さそうだったので、以前購入したのですが難しくて即挫折して即積読です。積読鋭意継続中。


The Little Schemer, 4th Edition初めての人のためのLISP[増補改訂版]計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)

Lisp/Scheme Interpreter & Compiler

LET OVER LAMBDA Edition 1.0

ようやくLOL(LET OVER LAMBDA Edition 1.0)を読了した今日この頃です。わからないことだらけです。7章のForthを実装するところから書いてみようと思っています。

本題

ただのメモです。

最近、一日のうちに何度も「PCを開くにも本を開くにも中途半端な時間」が多く発生するので、携帯で2chを見てます。
99 :デフォルトの名無しさん:2008/02/18(月) 22:30:16
>>94
> Essentials of Programming Languages
> 71. Continuation Passing Interpreterで。

3章がenvironment passing interpreterで、
7.3がimperative interpreger。

Reflection
http://library.readscheme.org/page11.html
Continuations and Continuation Passing Style
http://library.readscheme.org/page6.html
あたりもいいんじゃね?
Kenichi Asai. "Reflecting on the Metalevel Interpreter Written in Direct Style"とか。

字面を見ただけの当てずっぽうですが、The Little Schemer, 4th Edition の最後にSchemeで作る「Lispもどき」は Environment Passing Interpreter なんでしょうか。環境を渡しますよね。
これを実際に書いた時、初めて「環境」というのが何なのか理解できました。

参考

参考になりそうなところをざっくりとメモ。

書籍

Schemeのインタプリタとコンパイラのいろんな実装が書かれているそうです。

Lisp in Small Pieces
Lisp in Small Pieces
posted with amazlet at 10.04.28
Queinnec Christian
Cambridge University Press
売り上げランキング: 78719


こちらはContinuation-Passsing Interpretersなどが書かれている模様。

Essentials of Programming Languages, 2nd Edition
Daniel P. Friedman Mitchell Wand Christopher T. Haynes
The MIT Press
売り上げランキング: 100724
おすすめ度の平均: 5.0
5 楽しいインタプリタの教科書


(PDF)Three Implementation Models for Schemeの日本語訳がどこかに掲載されていたような記憶があるのですが、見つかりませんでした。


ところで2chは、iPhoneもAndroidも持っていませんのでこれで見ています。

追記


The Little Schemer, 4th Edition

AIプログラミングのケーススタディ「実用 Common Lisp」

欲しくなりますねぇ・・・。高い・・・。
@emeitch - 竹内先生曰く、「実用 Common Lisp」はSchemeの優れた再入門になっているとのこと。Schemeファンも必見ですね。

実用 Common Lisp
実用 Common Lisp
posted with amazlet at 10.04.28
ピーター・ノーヴィグ
翔泳社
売り上げランキング: 3499

amazonの内容紹介より
この本が扱っているトピックは、人工知能(AI)、コンピュータプログラミング技術、プログラミング言語Common Lispの3つである。
著者Peter Nrving(ピーター・ノーヴィグ)は
アメリカ合衆国の計算機科学者。現在はGoogleの研究本部長を務めている。
だそうで。


プログラミング言語SCHEMEのKent Dybvig(ケント ディヴィグ)と似てませんか。似てませんね。

プログラミング言語SCHEMEThe Scheme Programming Language, 4th Edition

2010/04/24

デザインパターンいろいろ

これがおもしろかった。
GoFのデザインパターン。「Gang of Four」って名前、ダサくないですか。
他のパターンも140文字でやって欲しい。
GoFの半分くらいは仕事で使ったことあります。でも、今思えば必要だったのか疑問です。パターン厨(pattern happy)だったと思います。

読み物

ある言語で頻繁に使われるデザインパターンは、他の言語ではパターンでさえない。 よって「デザインパターンは言語の弱さを示すサインである」という話。

なべあつ

すごく今更なお題ですけども。

なんとなく正規表現は使いませんでした。

そういえば、恥ずかしながら「正規表現」を知ったのはプログラマになってから2年以上も後のことでした。その間、社内で正規表現を見かけなかった環境って一体・・・。

追記

会社のせいにしちゃあいけないですね。

詳説 正規表現 第3版入門 正規表現 ~検索・置換・テキスト処理に強くなる!

LOL defmacro!


defmacro!。これを書いておかないと何も始まりませんね。LET OVER LAMBDA Edition 1.0は。

まだslimeの使い方がよくわかりません。C-c C-cはコンパイルで、C-x C-eがreplに読み込む、ということくらいでしょうか。その時、コード中に見つからないシンボルがあるとアンダーラインで示してくれるなど(↑画像)、ありがたいです。

schemeにもそういうのないのかな。quack.elにはたぶんないんですよね。


Gaucheのshiroさんも以下のようにおっしゃっているので、きっとslimeって多機能なんだろうなぁ。
shiro: うーむCL+slimeで作業してるとやっぱりgauche+quackは物足りなく感じるなあ。 http://bit.ly/b35LjH

LET OVER LAMBDA Edition 1.0

Re:部分適用, 関数合成

リファレンスを載せとくの忘れてた。

プログラミングGauche

部分適用, 関数合成

cutとcompose 良い。

関係ないけどfold-right。

確かsicpの2章にcomposeと一緒にrepeatedってのが出てたような。
ところでsicpって「シックピー(sick-pea)」と読むらしいですね。srfi同様「えすあいしーぴー」って読んでました。

一般的な再帰からnamed-letに書き直せない病。(letrecを経由するといける)

プログラミングGauche計算機プログラムの構造と解釈

2010/04/22

コンパイラの別名を「マクロ」という。

LET OVER LAMBDA Edition 1.0の6章「コンパイラの書き方とベンチマーク」P.235より。この本は終始こんなノリ。

コンパイラを作るのは、Lispを知らなければぞっとするような仕事なのだろう。

コンパイラを書く際のLispの優位性は、他の言語に比べてちょっと優れているという類のものではない。

コンパイラはやさしい。

マクロはプログラムをある言語から他の言語へとコンパイルする。
副音声がずっと「LISP最強!!」。

LET OVER LAMBDA Edition 1.0

2010/04/21

Pythonを突っ込んでEmacsで書けるようにしてみた


Pythonを入れてみました。Emacs言うてもMeadowですけども。
参考にしたのはここ。
.emacsに適当にC-cpythonなどを追加。
(defun python-other-window ()
  "Run py-shell on other window"
  (interactive)
  (python-mode)
  (split-window-horizontally 90)
  (let ((buf-name (buffer-name (current-buffer))))
    (py-shell)
    (get-buffer-create "*python*")
    (switch-to-buffer-other-window
     (get-buffer-create buf-name))))
(define-key global-map "\C-cpython" 'python-other-window)
Pythonは、GAEで2.5.xが要求されたので、win用インストーラのある2.5.4を選択しました。

初めてのPython 第3版

Emacs 画面端で折り返さない

切り替えたいことって、そんなに無い気もしますが。

(setq truncate-lines t)
(setq truncate-partial-width-windows t)

(defun togle-truncate-line ()
  (interactive)
  (let ((p (null truncate-lines)))
    (setq truncate-lines p)
    (setq truncate-partial-width-windows p)
    p))

(define-key global-map "\C-Q" 'togle-truncate-line)


入門 GNU Emacs 第3版入門Meadow/Emacs

2010/04/20

オブジェクト指向の達人ってどんだけ凄いの?


9 :仕様書無しさん:2007/11/23(金) 04:57:39
日常会話でオブジェクト指向用語が出てくるぐらいすごい。 

この間、俺とワイフの多重継承したチルドのインスタンスがニューされたよ。 
目元は俺を継承して、口元はワイフを継承している。 
きっと多彩なクラスをインプリメンツしたクレバーなチルドになるぞ。 
フューチャーが楽しみだ



10 :仕様書無しさん:2007/11/23(金) 05:06:18
ルー語じゃねぇかwww


12 :仕様書無しさん:2007/12/03(月) 20:27:04
昨日彼女と一緒にメメント観てたらいつのまにかチムポがブリッジしちまってさー 
そしたら彼女が俺の上にビジターしてきてアダプタしちゃったよ 
まあ全部俺の妄想で本当はシングルトンな毎日なんだけどさ




増補改訂版Java言語で学ぶデザインパターン入門

イクラちゃんってBoolean型だよな


1 :仕様書無しさん:2008/12/08(月) 15:47:21
ハーイ:true 
バブー:false


7 :仕様書無しさん:2008/12/08(月) 19:56:04
ちゃーん=null






プログラマのためのSQL 第2版

2010/04/19

プログラマーになってよかったと思うこと

9 :仕様書無しさん :2008/10/18(土) 16:34:29
ここまで低コストで、思い通りに動くモノが作れる世界は
実際問題、そうはないだろ

情熱プログラマー ソフトウェア開発者の幸せな生き方

無料CSVデータ

無料でダウンロードできる(っぽい)CSVを、ざっくり探してみました。
16の「海軍兵学校卒業者数一覧」と17の「ガンダムカラー」はなかなかストレンジ。
  1. 郵便番号データダウンロード - 日本郵便
  2. 住所データ、住所マスタ、住所CSVの無料ダウンロードサイト!【住所.jp】
  3. データダウンロード(CSV)│外国為替取引 セントラル短資FX
  4. みずほ銀行:ヒストリカルデータ
  5. 日本比較教育学会「比較・国際教育情報データベース」ダウンロードページ
  6. ATOK用郵便番号辞書配布サービス - 岐阜・大垣・名古屋のホームページ制作会社 > WORKSPACE > ソフトピアジャパン
  7. 株価データ情報
  8. アメダス気象図(近畿中国四国)
  9. 土木研究所観測データダウンロード
  10. 松山市水源状況・雨量 一覧表のダウンロード
  11. 株価データ ダウンロード
  12. ヒストリカルデータ - マーケット情報 - 外国為替(FX)を資産運用に変える。安心で選ぶならマネースクウェア・ジャパン
  13. 農林水産消費安全技術センター / 農薬登録情報ダウンロード(csvファイル)
  14. グリーンシート銘柄のCSVデータダウンロード
  15. ジャパンネット銀行:Japan Net Bank|CSVファイルのサンプルダウンロード|
  16. CSVファイル:heigakko.csv - 通信用語の基礎知識
  17. Kitbox - INDEX
  18. みどりのデータ

こっちが良いかも。

Rによるテキストマイニング入門

Gauche CSV

勝手がわからなかったのでmemoがてら。サンプルに使ったデータはこちら。
今回のサンプルにはちょっと大きかった。


参考


今更ながら、どう書く?orgすげーな。shiroさんのコードがあるある。


プログラミングGauche

2010/04/18

邪悪なPostScriptコード


%!OPS-1.0 %%Creator: HAYAKAWA,Takashi
/A/copy/p/floor/q/gt/S/add/n/exch/i/index/J/ifelse/r/roll/w/div/H{{loop}stopped
Y}def/t/and/C/neg/T/dup/h/exp/Y/pop/d/mul/s/cvi/e/sqrt/R/rlineto{load def}H 300
T translate(V2L&1i2A00053r45hNvQXz&vUX&UOvQXzFJ!FJ!J!O&Y43d9rE3IaN96r63rvx2dcaN
G&140N7!U&4C577d7!z&&93r6IQO2Z4o3AQYaNlxS2w!!f&nY9wn7wpSps1t1S!D&cjS5o32rS4oS3o
Z&blxC1SdC9n5dh!I&3STinTinTinY!B&V0R0VRVC0R!N&3A3Axe1nwc!l&993dC99Cc96raN!a&1CD
E&YYY!F&&vGYx4oGbxSd0nq&3IGbxSGY4Ixwca3AlvvUkbQkdbGYx4ofwnw!&vlx2w13wSb8Z4wS!J!
c&j1idj2id42rd!X&4I3Ax52r8Ia3A3Ax65rTdCS4iw5o5IxnwTTd32rCST0q&eCST0q&D1!&EYE0!J
&EYEY0!J0q!x&jd5o32rd4odSS!K&WCVW!Q&31C85d4!k&X&E9!&1!J!v&6A!b&7o!o&1r!j&43r!W)
{( )T 0 4 3 r put T(/)q{T(9)q{cvn}{s}J}{($)q{[}{]}J}J cvx}forall 270{def}H
K{K{L setgray moveto B fill}for Y}for showpage

邪悪過ぎませんか・・・。

私も、PostScriptはちょっぴり書くことがあるのですが、とても読めません・・・。そもそも読めるようなものなんでしょうか・・・。
%!PS-Adobe-3.0 
% factorial

/fact { 
    1 dict begin 
        /n exch def 
        n 1 eq n 0 eq or { 
            1 
        } { 
            n 1 sub fact n mul 
        } ifelse 
    end 
} def

5 fact % 120

gif

こっちもすごいなぁ。gifにできるんですね。


%!PS-Adobe-3.0
%%BoundingBox: 0 0 100 20
%%Title: orz.ps
%%Creator: @aka
%%CreationDate: Thu May 19 23:06:30 2005
%%EndComments

64 dict begin

/dots 14 def
/Helvetica-Bold findfont 18 scalefont setfont

/orz {
  0 1 dots {
    /head exch def
    0 0 moveto
    dots head sub { (.) show } repeat
    (o) show
    head { (.) show } repeat
    (rz) show
    showpage
  } for
} def

orz

end
showpage
%%EOF

9LISP

9LISPでは、LOLの「第7章 Lispを動かすForthを動かすLisp」を参考にPostScriptを実装してみたい、というのも当面の目標の一つです。最終的にはS式で書けるPostScript的な何かができたら良いなーなどと。

たまには、スタック指向な言語もいかがですか。

関連


PostScriptリファレンスマニュアル第3版 (ASCII電子出版シリーズ)
Adobe Systems
アスキー
売り上げランキング: 332789
おすすめ度の平均: 4.5
4 端から端まで読む本ではありませんが
5 待ってました
5 PostScript開発者必携本です!
PostScript & Acrobat/PDF
PostScript & Acrobat/PDF
posted with amazlet at 10.04.18
トーマス マーツ
東京電機大学出版局
売り上げランキング: 1059666
おすすめ度の平均: 4.0
4 画像処理関係の開発者にお勧め