そういえば、伝統的マクロなら継続も実装できるんでしたっけ?
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/
(let ((a #f)(b #f)(c #f)) (list a b c)) を (let #f (a b c) (list a b c)) と書ける的な。
良い名前が思い浮かびませんでした。当初 lump-init-let としていましたが、長いのでボツ。(let-with init-value ... というような意味合いを込めて、let/ ・・・。
良い名前が思い浮かびませんでした。当初 lump-init-let としていましたが、長いのでボツ。(let-with init-value ... というような意味合いを込めて、let/ ・・・。
labels :
scheme,
syntax-rules
syntax-rules: define-syntax-rule, define-syntax-rules
こんなのもありかなー、とか。
こんなのもありかなーとか。
define-syntax-rules がそうなら、define-syntax-rule もこうかなーとか。
結局このくらいが丁度良いのかも。
こんなのもありかなーとか。
define-syntax-rules がそうなら、define-syntax-rule もこうかなーとか。
結局このくらいが丁度良いのかも。
labels :
scheme,
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 が紛れ込むこともしばしばです。これはテキストファイルに限らずプログラムを書いている時もそうで、わりと困っていました。
そこで、こういうものを見かけたので、試してみたら便利も便利。。。
labels :
Emacs
quack-find-file
Emacsでschemeを書く時に、quack.elを使っています。quack.elを使っていると、C-x C-f(つまり find-file)がquack-find-fileになります。
これを解除したかったので、以下のように.emacs に書き加えました。
(setq quack-remap-find-file-bindings-p nil)
これを解除したかったので、以下のように.emacs に書き加えました。
(setq quack-remap-find-file-bindings-p nil)
2010/05/27
「そのプロセスにおいて、Schemeを使うことに関する多くの勘を やしなうだろう。」
数nの階乗を計算するが、手続きの最終行で自身に再帰できるようにするた めに名前"fact"が必要であるように思える。しかし、我々はそれは必要でない ことを理解し、そのプロセスにおいて、Schemeを使うことに関する多くの勘を やしなうだろう。
これが本当かどうかは置いといて、みんなもっと Y Combinator で遊ぼうよー!
labels :
scheme,
Web,
Y Combinator
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
labels :
scheme,
Y Combinator
Re: Re: syntax-rules: reverse-and-quote-list @ IronScheme
「展開した結果に...を含める」には (... ...) と書くことにR6RSではなっています。
R6RS と聞いて思い浮かんだのは、IronScheme, mosh, Ypsilon でした。
取りあえず今回は、すでにインストール済みの IronScheme で試してみました。
どうやら意図通り動いたようです。
追記
IronScheme は Emacs インターフェースもあったりします。以前少し試したことが・・・。
labels :
IronScheme,
scheme,
syntax-rules
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 なる難しそうなものがある、ということくらいしか知りません。
追記
補助マクロやローカルマクロが思ったように動かないなら、パターンを追加すれば良いのかも?でも、余計なインターフェース(?)が増えるのか・・・。うーん。
labels :
scheme,
syntax-rules
2010/05/26
syntax-rules: amb
非決定性というやつです。よく分からないので、写経してみました。動き気持ち悪いですね。。どうなってるんですかこれ。。
確か、On Lisp や SICP (計算機プログラムの構造と解釈)にも出てくるらしいですね。
わけわかめ。
確か、On Lisp や SICP (計算機プログラムの構造と解釈)にも出てくるらしいですね。
わけわかめ。
追記
labels :
continuation,
scheme,
syntax-rules
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 のことを思い出しました。
labels :
continuation,
Gauche,
scheme,
syntax-rules,
The Seasoned Schemer
syntax-rules: reverse-and-quote-list
取りあえず書いてみたのがこれ。微妙っぽい。
で、PDF に書いてあったのは、こういうの。なるほどー!
これは、letrec-syntaxとやらで、rl-helperをローカルに定義できるのでは?
エラー。うーん。間違ってるのはどこだろう。。エラーメッセージもよくわからない。
letrec-syntax, let-syntax は余計に情報少ないな・・・(web)。
labels :
scheme,
syntax-rules
syntax-rules: shadow shadows
labels :
scheme,
syntax-rules
2010/05/25
syntax-rules: implecations
labels :
Gauche,
scheme,
syntax-rules
Re: syntax-rules: update-if-true (cond-set!)
shiroさんにご指摘頂きました。大変恐縮です。。
仰る通りですね。(そりゃそうですよね)
こうでしょうか。。
教えて頂きました。
って、ここは・・・偶然にも今日、眺め始めたページ(笑)
仰る通りですね。(そりゃそうですよね)
こうでしょうか。。
教えて頂きました。
って、ここは・・・偶然にも今日、眺め始めたページ(笑)
追記
引数2つのところはいらないかな?
labels :
Gauche,
scheme,
syntax-rules
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)
labels :
scheme,
syntax-rules
syntax-rules: until
labels :
Gauche,
scheme,
syntax-rules
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)で驚きましたね。
labels :
Gauche
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 って自由度高いですよね
labels :
Gauche,
syntax-rules
2010/05/22
Emacs custom-set-faces
custom-set-faces のことを知りませんでした。お陰様で、quack.el のシンタックスハイライトを変更したかったとき、quack.el を直に修正しましたよ・・・。
.emacs 編集時(lisp-mode?)の、コメントは斜体ですよね。それを変更しました。
そこで、quack.el のことを思い出してのぞいて見たら同じことができるようだったので、そうしました。
そういえば、auto-complete.el でもやってましたね。
何か一冊くらい Emacs の本が欲しいな。。
.emacs 編集時(lisp-mode?)の、コメントは斜体ですよね。それを変更しました。
そこで、quack.el のことを思い出してのぞいて見たら同じことができるようだったので、そうしました。
そういえば、auto-complete.el でもやってましたね。
何か一冊くらい Emacs の本が欲しいな。。
labels :
Emacs
2010/05/19
Re: TSS rember1*
もっとカッコよく書けないのかなーと思いながら。
いくつか書いていれば何か思いつくかなー、と思いましたが思いつきませんでした。わかりにくくなった気がします。
いくつか書いていれば何か思いつくかなー、と思いましたが思いつきませんでした。わかりにくくなった気がします。
しかし、ホント The Seasoned Schemer のコードときたら・・・。。
labels :
Gauche,
scheme,
The Seasoned Schemer
登録:
投稿 (Atom)