PacemakerのPre-booking

520ユーロか。なんか微妙な値段設定だな。でも欲しくなりそうだなあ。

Gaucheのbeginはperlのdo

最後の式を評価して返す

perlでfunc {}

func {なんかコード} = func(sub {なんかコード})の略らしい

sub Testfunc (&){return $_[0]->();}
Testfunc {print "hello kzfm"};

これはうまく動くが(&)がないと

sub Testfunc {return $_[0]->();}
Testfunc {print "hello kzfm"};

下のようなエラーが出る。

Not a CODE reference at test.pl line 1.

デバッガ動かしてみると先にTestfunc {print "hello kzfm"}がブロックとして評価されて、その後Testfunc {return $_[0]->();}が評価されるので$_[0]がコードブロックじゃないといわれているようだ。

プロトタイプで(&)ってことはコードブロック受け取ってるってことだよな。無名関数ってコードブロックか、、、あーなんとなくわかってきた気が。やっと{}がlispの括弧に見えてきた。

Gaucheの引数

GaucheはなにやらPerlとかPythonっぽくて楽しいですな。毎日Gaucheクックブックを一つは読むようにしてわからないとこを調べながらというスタイルで。(まだ3日だけど日付順に読んでる)

3.3 Schemeスクリプトを書く

いくつか簡単な例を示します。最初の例はUnixのcat(1)コマンドを模するものです。エラー処理やコマンドラインオプションの処理は行っていません。

#!/usr/bin/env gosh

(define (main args)   ;entry point
  (if (null? (cdr args))
...

(cdr args)ってことはperlの$0みたいに(car args)もプログラム自身の名前を返すのかも。

(define (main args)
(print "car:\t" (car args))
(print "pname:\t" *program-name*))

program-nameはスクリプトファイル名に束縛されるらしい。

$gosh test.scm
car:    test.scm
pname:  test.scm

SICPの訳

Amazonに訳が悪いと散々書かれていて、ちょっと躊躇したのだけど、実際買って読んでみたら特に訳がひどいと思うことはなかった。

あと、原著読めばとか書いてあるのは、原著読めばって書く前に原著読むだろうから、そもそも訳が悪いとかすらいわんだろう。結局何であんなに訳が悪いというコメント気にしたのか今となってはさっぱりわからん。日本語訳より原著で読んだほうがよくわかって良いというレビューがなかったのもいまとなってはフーンとか思う。Amazonの訳が悪いってのは何の裏返しなのかよく考えないといけないのかもと、いまさら学んだ。

訳が良かったらもっと早く飲み込めるかというと、そういうもんではない気もするし。

ProductName 計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン,ジュリー サスマン,ハロルド エイブルソン
ピアソンエデュケーション / ¥ 4,830 (2000-02)
通常24時間以内に発送

僕的には買って良かったと思える本の一つ。

perlの0e0は真だけど0

HOP3章終了。

"0e0"の使いどころがなかなか。

論理演算

$ "0e0" || 1
0e0
$ 0 || 1 
1

真と判定、で演算してみる。

$ "0e0" * 5
0
$ "0e0" + 5
5
$ "0e0" - 5
-5

数値だ

$ "0e0" == 0
1
$ "0e0" eq 0

論理演算で真を返すのに0

で、これがどう便利かというと

$cached{$key} ||= make_cache($key)

キャッシュに0が入ってる場合偽と判定されてしまい、キャッシュがあるのに再計算してしまうのだけど"0e0"を入れておくときちんとキャッシュが効くと。

ProductName Higher-order Perl: A Guide To Program Transformation
Mark Jason Dominus
Morgan Kaufmann Pub / ¥ 7,678 (2005-05-30)
通常24時間以内に発送

HOPではOrcish maneuverに絡めてあって、3章はこの部分が一番面白かった。4章はイテレータ、この章に100p近く割いてある。

はなめん棒

はなめん棒

富士五湖道路の須走ICのすぐ近くに、うどん屋さんがあるというので、行ってみることにした。

IMG_1289

わかりやすい立地。

ざるうどんはなめらかなのにこしがある。ニュルッとした喉越しがうまい。

ざる IMG_1293

たぬきにぎりは味付け天かす入りおにぎり。これも美味。

たぬきにぎり

満足

rosemaryの花

もう5年ぐらい育てて割と愛着がわいている僕のローズマリーの花が咲いていた。

rosemary

挿し木で増やしたいんだけど、枝が幹みたいになっちゃってて、切って水に漬けても根が出てくるのか不安だがやってみることにした。

Gaucheのlet1

let1って何だろうって思ったので。

Gauche ユーザリファレンス: 4.6 変数束縛

let1 var expr body …

変数が一つしか無い場合の便利なマクロです。次のように展開されます。

(let ((var expr)) body …)

Scheme入門読んだ

1章から12章まで割と一気目で。

以下覚書

シンボルの大文字と小文字

Gauche ユーザリファレンス: 2.4 大文字小文字の区別

Lisp系の言語は歴史的にシンボルの大文字小文字を区別していませんでした。 Schemeもその流れを汲んでおり、R5RSでもシンボルは読み込まれる時に大文字小文字の区別をしないと定義されています。(但し、R5RSの範囲内でも処理系内部では大文字小文字を区別することになってます。ここで問題としているのは読み込み時の動作です。)

しかし現在では、プログラミングが一つの言語で完結することは滅多にありません。他の言語とインタフェースを取る場合、Scheme側でも大文字小文字を区別するようにしておいた方が便利です。

gosh -fcase-fold

で大文字小文字を区別しないモード

cdrの読み

クダー

カー、シーディーアールって読んでた。

let系の違い

Scheme入門 第12章 局所変数レット

局所変数(ローカル変数)を定義する let, let*, letrec という構文もあります

letrecをいまいち理解しないでSICP読んでた。

日本語

コンパイル済Windows用バイナリだと日本語が化けたがどうすればいいのかちょっと見つからなかった。

gosh> (gauche-character-encoding)
utf-8

内部文字エンコーディングはUTF-8

クックブック

Gaucheクックブックを一日ひとつ見ていけば3ヶ月以上楽しめてナイス。