2010/04/06

defmacro: LOL nif

LET OVER LAMBDA Edition 1.0
マクロを使えば、他の言語では全く不可能なことが可能になる。 --Doug Hoyte
define-syntaxの書き方や仕組みも良くわかっていないのですが、取り合えずトライ。

define-syntaxの方はexprに副作用があっても1回しか評価されてない、ということで良いのかな。あれ、「,g」を「, g」と書いてるがそれは良いのか?

追記

展開してみれば良いのか。


プログラミングGaucheLET OVER LAMBDA Edition 1.0

defmacro: LOL nlet

マクロは、Lispが1つのプログラミング言語として有する唯一最大の強みであり、いかなるプログラミング言語においても唯一最大の強みである。  --Doug Hoyte
著者のLisp(のマクロ)マンセーっぷりがすごい。
(Gaucheで書いてみてます)


プログラミングGaucheLET OVER LAMBDA Edition 1.0

2010/04/04

srfi-9 define-record-type

「srfiわからない・・・」「ヒント:gauche」
構造体的なものないかなー、と調べてみたところsrfi-9のrecord型が丁度良さそう。classは少し大袈裟かなと。

プログラミングGauche

2010/04/03

新ロゴ

ロゴが新しくなりました。春ですし。



どちらもロゴジェネレータで作ったものですけども。。
現在、@msskndさんにお願いして擬人化プロジェクトが進んでいたりします。9LISPの読み方は「きゅうりすぷ」「くりすぴー」「くりすぷ」「ないんりすぷ」・・・など、なんでも良いです。ですが9LISPたんは「きゅうりすぷたん」です。乞うご期待。
やっぱどこかに「λ」が欲しいですね・・・。

2010/04/02

「ハッカーというのは自分で“ハッカー”と名乗るのではなくて、いろいろやっているうちに人からそう呼ばれるもの」

 「ハッカーというのは自分で“ハッカー”と名乗るのではなくて、いろいろやっているうちに人からそう呼ばれるもの」
「遊び心がある(playful)ことがハックの条件の1つです」 
 和田先生のマサチューセッツ工科大学時代の研究仲間に、こんな人がいたそうだ。その人は、エレベータに乗り込むなり操作盤のパネルを開いてパチパチとスイッチを切り替え、1階から9階まで必ずノンストップで上がってしまい、1日の作業を終えて帰宅する際には、必ず自分の端末からエレベータを自分のいる階に呼び寄せてしまう。 
かっけー。

継続 continuation

お陰様で「継続」が少しずつわかってきました。

ごく簡単なコードについては
  • 継続が見えるようになってきた
  • CPS(継続渡しスタイル)に書き換えることができるようになってきた
  • call/ccによる脱出が書けるようになってきた
  • 継続呼び出しによる「脱出」が結果的にそう見えるだけで、厳密には「脱出」という表現は相応しくないのではないか、と思うようになった
  • call/ccが使われているコードに対する抵抗が減った
しかし
  • 少し複雑になるだけで継続なんてちっとも見えやしない
  • 厳密なCPSなんて全く書けやしない
  • call/ccが散在するコードを見ると目が回る
というような状態。抵抗が減っただけでも、大きな収穫だと思っています。理解の助けになるのは、やはり簡単な例で良いのでたくさん書いてみることだなーと、いまさら思いました。いや、そんなにたくさん書いていないので、もっとたくさん書かないといけないなーと思っているところでした。

2010/04/01

2種類のshell



タイラギハマグリ

TSS length, Y!, Y-bang

The Seasoned Shcemer P.119からまたもやlengthを使ったY Combinatorが出てきます。The Little Schemerで出てきたY Combinatorと違うのは、どうやら副作用を使うところのようです。名前にも「!(bangと読むらしい)」がついています。

ここ、ちょっとよくわかりませんでした。再読が必要かもしれません。取り合えずコードは書いてみました。


The Seasoned Schemer

codepadには選択肢がなかったので

おもしろいコードがあったので貼りたかったのですが、codepadではJavaは対応していませんでした。
対応しているのは以下のもの。
C, C++, D, Haskell, Lua, OCaml, PHP, Perl, Plain Text, Python, Ruby, Scheme, Tcl,

こちらを使ってみました。
対応している言語が多い。まさかWhitespaceまでシンタックスハイライトされるとは・・・。
Ada, Assembler, Bash, Brainf**k, C, C#, C++, C99, strict, CLIPS, COBOL, Common Lisp (clisp), D(dmd), Erlang, Fortran, Go, Haskell, Icon, Intercal, Java, JavaScript (rhino), Lua, Nemerle, Nice, Ocaml, Pascal (fpc), Pascal (gpc), Perl, PHP, Pike, Prolog (swi), Python, Python3, R, Ruby, Scala, Scheme (guile), Smalltalk, Tcl, Text, Visual Basic .NET, Whitespace

参考

パターン指向リファクタリング入門~ソフトウエア設計を改善する27の作法