2010/04/13

LOL tree-leaves

これはtree-leaves%%までで十分だと思いましたが、どうなんでしょう。
予測できる使い方の範囲では、これが最も直感的で贅肉のない方法だと思う。
らしい。個人的には、むしろ直感的でなくなっているように思いますが・・・。


ところで、Gaucheで書くにあたり、何の気なしにfold-rightで書きましたが、これだとLOLに書かれているようなドットリストではうまくいきませんね。
fold-rightは関係ないですね。

このtree-leavesのところで「アナフォラ」という単語が出てきました。アナフォリックマクロ楽しみです。


LET OVER LAMBDA Edition 1.0

2010/04/11

LOL flatten

これもLOLより(というよりOn Lispより?)。Gaucheで書いてみましたが、これも探せばどこかにありそうですね。

fold-rightで書いてみましたが、大丈夫かな。なんか怪しいような気もする。もしかするとfoldでreverseな方が良いかな。いやfold-rightで大丈夫か。


追記

LOLより。Common Lispのlabelsはschemeのletrecみたいなもの、と考えて良いんだろう、きっと。なんかCLの方が美しい気がする(labelsに限らず)。


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

2010/04/10

LOL mkstr, symb, group

mkstr, symb, groupはLet Over Lambdaで必要になるユーティリティ関数です。On Lispよりのものだそうです。On Lispは見事に積読中。
LOLはあの調子ですから読むのはサクサクなのですが、書くのが全然追いつきません。

internってなんぞ。symbの最後がvaluesなのもなぜだろう。わからないけど取り合えず放っておきます。以下コードはOn Lispより。

Gaucheで。(util.listに、groupと同等のslicesがあるそうです)

call-with-string-output-port・・・ってどこにあるんだろう。


(cut cons (+ a 1) <>) ≡ (lambda (x2) (cons (+ a 1) x2))
(cut list 1 <> 3 <> 5) ≡ (lambda (x2 x4) (list 1 x2 3 x4 5))
(cut list) ≡ (lambda () (list))
(cut list 1 <> 3 <...>)
≡ (lambda (x2 . xs) (apply list 1 x2 3 xs))
(cut <> a b) ≡ (lambda (f) (f a b))
部分適用便利だなー!

参考


追記

internの解説を教えていただきました。

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

2010/04/07

print, print1, princ, pprint

CL-USER> (let ((v "hoge"))
           (list (print v)
                 (prin1 v)
                 (princ v)
                 (pprint v)))

"hoge" "hoge"hoge
"hoge"("hoge" "hoge" "hoge" NIL)

prin1
関数readに適した出力,すなわちLispプログラムに適した出力を生成する.
princ
prin1がLispプログラムに適した出力を生成するのに対し,princはユーザの見やすい出力を生成する.エスケープ文字も出力されない.
print
先頭に改行が付加される点を除いてprin1と同じである.
pprint
続くスペースを空行にすることを除いてprintと同じである.

(princ "\n\nこんにちわ!")


こんにちわ!
(prin1 "\n\nこんにちわ!")\n\nこんにちわ!

追記

どうでも良いことだけど、やっぱこうかな。
CL-USER> (mapcar (lambda (e)
                   (funcall e "hoge"))
                 `(print princ prin1 pprint))

"hoge" hoge"hoge"
"hoge"("hoge" "hoge" "hoge" NIL)



P.S ってPostscriptの略だったんですか、そうですか。

この方のブログ、Google Alertによく引っかかるので以前から存じてはいました。PostScript(プログラミング言語)に何かしらの思い入れでもあるんだろうか、などと思っていました。

先ほどTwitterで教えて頂いたのですが、PostscriptってあのPSなんですね。手紙のP.S。追伸ってことですか。そうですか。
逆ポーランド記法でスタック指向なPostScriptを、LotYなどにどうでしょうか。
実はこのブログにも一つのカテゴリがあります(笑)

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たんは「きゅうりすぷたん」です。乞うご期待。
やっぱどこかに「λ」が欲しいですね・・・。