2010/05/31
熊本市内の本屋さんに「実用 Common Lisp」がなかった
今日、私の知る限りで最も品揃えの良い熊本市内の本屋さん2件を回ってみましたが、実用 Common Lisp (IT Architects’Archive CLASSIC MODER) は置いてませんでした・・・orz
「私の知る限り」なんて言わなくても、熊本市内で品揃えの良い2件と言ったら、三年坂のツタヤとダイエーのキクヤですね、はい。
ついでに、プログラミング言語SCHEME と ビューティフルコード を立ち読んだら、欲しくなりました・・・。
後者は、scheme の syntax-case が載っている25章だけでも良いので欲しいなー。などと Twitter でつぶやいたら、PDF(英語)を教えて頂きました!ありがとうございます!
前者は、英語版が Web 上に公開されているので、チラ見してみます。
Web 上には、無料で読めるものが他にもたくさんあるしなー・・・。実用 Common Lisp (IT Architects’Archive CLASSIC MODER) は、また今度で良いかなー・・・。いや、立ち読んでみたいだけだったんだ。



「私の知る限り」なんて言わなくても、熊本市内で品揃えの良い2件と言ったら、三年坂のツタヤとダイエーのキクヤですね、はい。
ついでに、プログラミング言語SCHEME と ビューティフルコード を立ち読んだら、欲しくなりました・・・。
後者は、scheme の syntax-case が載っている25章だけでも良いので欲しいなー。などと Twitter でつぶやいたら、PDF(英語)を教えて頂きました!ありがとうございます!
前者は、英語版が Web 上に公開されているので、チラ見してみます。
Web 上には、無料で読めるものが他にもたくさんあるしなー・・・。実用 Common Lisp (IT Architects’Archive CLASSIC MODER) は、また今度で良いかなー・・・。いや、立ち読んでみたいだけだったんだ。
syntax-rules: let/
syntax-rules: define-syntax-rule, define-syntax-rules
2010/05/29
2010/05/28
Emacs view-mode がステキ便利
ソースコードはもちろんですが、テキストファイルなどを Emacs で読む機会が多いです。
つい先日も、Twitter で見かけたテキストファイルをダウンロードして、Emacs で読んでいました。
そこで、こういうものを見かけたので、試してみたら便利も便利。。。
つい先日も、Twitter で見かけたテキストファイルをダウンロードして、Emacs で読んでいました。
実は、C-x C-q (読み取り専用)なども知らなかったため、C-n C-p で読んでいる時に文章中に n や p が紛れ込むこともしばしばです。これはテキストファイルに限らずプログラムを書いている時もそうで、わりと困っていました。
そこで、こういうものを見かけたので、試してみたら便利も便利。。。
quack-find-file
2010/05/27
「そのプロセスにおいて、Schemeを使うことに関する多くの勘を やしなうだろう。」
Yコンビネータ 継続編
タイトルに Y Combinator と入れましたが、正確にはそうではないようです。
すごくおもしろそうだったのでプリントアウトして頑張って読んでます。印刷したら10ページありました。まだ3ページくらいしか読んでないので、残りを読んでみます。
で、一見してもよくわかりません。よくわからないので、いじくり回してみました。先日ノーマルな Y Combinator でやったことの、逆過程のようなことをやりました。
結果、理解できてないのですが、なんとなく雰囲気がつかめた気がします。気がするだけかもしれません。
以下コード。

すごくおもしろそうだったのでプリントアウトして頑張って読んでます。印刷したら10ページありました。まだ3ページくらいしか読んでないので、残りを読んでみます。
で、一見してもよくわかりません。よくわからないので、いじくり回してみました。先日ノーマルな Y Combinator でやったことの、逆過程のようなことをやりました。
結果、理解できてないのですが、なんとなく雰囲気がつかめた気がします。気がするだけかもしれません。
以下コード。
- vallog: amb
- vallog: メモ化された Y Combinator
- vallog: pluggable Y Combinator
- vallog: pluggable Y Combinator 2
Re: Re: syntax-rules: reverse-and-quote-list @ IronScheme
Re: syntax-rules: reverse-and-quote-list
letrec-syntax が、なかなか思ったように動かない(書き方がわからない)という状態でした。
補助マクロやローカルマクロが思ったように動かないなら、パターンを追加すれば良いのかも?
ということで、今回の場合はこれで動いたようです。
なんかメソッドのオーバーロード(C#とか)に似ていませんか。
shiro さんにコメントを頂き、教えて頂きました。ありがとうございます!
こうやって処理系の作者の方から直接コメントを頂けるなんて、すごい世界ですね、インターネッツは・・・。

補助マクロやローカルマクロが思ったように動かないなら、パターンを追加すれば良いのかも?
ということで、今回の場合はこれで動いたようです。
なんかメソッドのオーバーロード(C#とか)に似ていませんか。
shiro さんにコメントを頂き、教えて頂きました。ありがとうございます!
こうやって処理系の作者の方から直接コメントを頂けるなんて、すごい世界ですね、インターネッツは・・・。
define-syntaxの直下にletrec-syntaxが来る形はGaucheではまだサポートされていません。
「展開した結果に...を含める」には (... ...) と書くことにR6RSではなっています。Gaucheでは未サポートです。R5RS をまともに読んだことがない、というのがよくないですね・・・orz R6RS についてはほとんど何もしりません。。R5RS に比べてページ数が3倍の150ページになったらしいことと、defmacro でできることができるらしい syntax-case なる難しそうなものがある、ということくらいしか知りません。
追記
補助マクロやローカルマクロが思ったように動かないなら、パターンを追加すれば良いのかも?でも、余計なインターフェース(?)が増えるのか・・・。うーん。
2010/05/26
syntax-rules: amb
非決定性というやつです。よく分からないので、写経してみました。動き気持ち悪いですね。。どうなってるんですかこれ。。
確か、On Lisp や SICP (計算機プログラムの構造と解釈)にも出てくるらしいですね。
わけわかめ。

確か、On Lisp や SICP (計算機プログラムの構造と解釈)にも出てくるらしいですね。
わけわかめ。
追記
syntax-rules: try
macroの方のPDFを一通り読み終えたので、continuationの方のPDFを読み始めました。
英語の方は、ほとんどわかりません。The Seasoned SchemerやThe Little Schemer, 4th Editionは雰囲気と勢いで読みました。
The Seasoned Schemerに出てくる try のことを思い出しました。

英語の方は、ほとんどわかりません。The Seasoned SchemerやThe Little Schemer, 4th Editionは雰囲気と勢いで読みました。
The Seasoned Schemerに出てくる try のことを思い出しました。
syntax-rules: reverse-and-quote-list
取りあえず書いてみたのがこれ。微妙っぽい。
で、PDF に書いてあったのは、こういうの。なるほどー!
これは、letrec-syntaxとやらで、rl-helperをローカルに定義できるのでは?
エラー。うーん。間違ってるのはどこだろう。。エラーメッセージもよくわからない。
letrec-syntax, let-syntax は余計に情報少ないな・・・(web)。
2010/05/25
Re: syntax-rules: update-if-true (cond-set!)
syntax-rules: update-if-true!
プログラミングGauche って、マクロの章すごく少ないですよね・・・。syntax-rules の練習問題というか例題というか、そういうのをたくさん見たい。ソース読め?
追記
コメント欄より。cond-set!の2番目の節はおそらくやりたいことと違うのではないかと推察します。修正してみました。
init2だけが複数扱いになり、var2が繰り返されます。
(cond-set! a b c d e f g)
は
(if a (begin (set! b c) (set! d e) (set! d f) (set! d g)))
になります。(2番目以降、set!されてるのはすべてd)
2010/05/24
月末取得
私は、今まで以下のようにしていました。
- 次月の頭を取得
- 1日減算する
例えば、2010/05 の月末を取得したい場合。
- 2010/06/01 を取得する
- 1から1日減算する
- 2010/05/31 が返る
今日、Gauche のリファレンスを眺めていて、この「1日減算する」というのが見当たらなくて、どうやればいいのかわかりませんでした・・・。
検索してみると、こういうのがありました。
検索してみると、こういうのがありました。
(define (days-of-month date) (inexact->exact (- (date->modified-julian-day (next-month date)) (date->modified-julian-day (current-month date)))))
julian というのが、たぶんユリウス暦のことだろうというのはわかったのですが、ユリウス暦というのが何なのか、実はよく知りませんでした。
Function: current-julian-day [SRFI-19] 現在のユリウス日(Julian day)を返します。Julian dayは -4714-11-24T12:00:00Z (November 24, -4714 at noon, UTC) からの日数を 実数で表現したものです。 |
余談ですが。日付関連って、結構面倒です。業務アプリは日付を扱う機会が多いですよね。プログラマとして仕事を始めたばかりの頃、特に迷走したことを覚えています。
例えば、「期間と基準日を指定して基準日から見て相対的な偶/奇数週の月水金の祝日意外に予定を展開」などの条件指定ができる機能などでしょうか。過去も含めて長期間を指定された場合など、特に面倒そうですね。。まず祝日が面倒ですね。
SQL が面白くて調子に乗っていた時なども悲惨でした。担当していた業務アプリが MSSQL のみのサポートから MSSQL/MySQL サポートになった時などは吐けました。。
--int型の任意の日付から月末を取得する SELECT CAST(CONVERT(VARCHAR, DATEADD(DAYOFYEAR, -1, DATEADD(MONTH, 1, CONVERT(DATETIME, CONVERT(VARCHAR(6), REPLACE(STR(20080215), ' ', '')) + '01 00:00:00', 112))), 112) AS INT) --結果:20080229 |
この場合、サポート DB が増えたことよりも、こういったクエリを散在させていたことが致命的だったわけです。。下級戦士どころじゃねーぞ。
そういえば JavaScript なんかも、月が0始まり(0~11)で驚きましたね。
そういえば JavaScript なんかも、月が0始まり(0~11)で驚きましたね。
syntax-rules: for
結局、9LISP の宿題をやり終えていなかったので、いくつか書いていました。
step を追加。
練習がてら do マクロで書き直し。
数値に限らないように書き直し。
再度 do マクロ。
さらに、for らしく。
この辺で、劣化 do マクロを書いている様な気がしてきたので終了。
for って自由度高いですよね
for をより for らしく書き直していったつもりでしたが、do マクロに近づいて行きました。do マクロと聞くと do ~ while とか do ~ until などを連想しますが、for に近いですね。というか、for じゃないですか。
これは、for というより nfor といった感じでしょうか。step を追加。
練習がてら do マクロで書き直し。
数値に限らないように書き直し。
再度 do マクロ。
さらに、for らしく。
この辺で、劣化 do マクロを書いている様な気がしてきたので終了。
for って自由度高いですよね
2010/05/22
Emacs custom-set-faces
2010/05/19
Re: TSS rember1*
もっとカッコよく書けないのかなーと思いながら。
いくつか書いていれば何か思いつくかなー、と思いましたが思いつきませんでした。わかりにくくなった気がします。
いくつか書いていれば何か思いつくかなー、と思いましたが思いつきませんでした。わかりにくくなった気がします。
しかし、ホント The Seasoned Schemer のコードときたら・・・。。