Shiro:UnixUser0307

Shiro:UnixUser0307

Unix User 7月号に 「使って遊ぶ! GaucheによるSchemeスクリプトプログラミング」という記事を 書かせて頂きました。

単なるSchemeの紹介なら他にもあるので、ちょっと欲張って 「最短距離でマクロまで解説する」という無謀な試みをしました。 そのためわかりにくくなってしまったかもしれません。 コメント等、書き込んで頂ければ幸いです。


記事中に出てきたURL

ハッカーになろう

http://cruel.org/freeware/hacker.html

普通のやつらの上を行け

http://practical-scheme.net/trans/beating-the-averages-j.html

R5RS

http://www.schemers.org/Documents/Standards/R5RS/HTML/

R5RS日本語訳

http://www.math.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html

Gaucheのダウンロード

http://sourceforge.net/projects/gauche/

Gaucheのホームページ

http://practical-scheme.net/gauche/index-j.html

Gauche:Platform

http://practical-scheme.net/wiliki/wiliki.cgi/Gauche:Platform

vi for schemers

http://www.ksky.ne.jp/%7Esakae/sicp/schemers-vi.html

The Origin of CAR and CDR in LISP

http://home.planet.nl/~faase009/HaCAR_CDR.html

SRFI

http://srfi.schemers.org/

なんでもλ

http://practical-scheme.net/docs/lambda-j.html

なんでも再帰

http://practical-scheme.net/docs/tailcall-j.html

マクロの例(リストの内包表記)

http://practical-scheme.net/wiliki/wiliki.cgi/Scheme:マクロの効用

マクロの例(Perl風マクロ)

http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/#perl.scm

Schemeの情報

http://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html


他サイトのコメント


コメント、質問等どうぞ。

(適当に下に追加して頂ければ、表題等、小人さんが整形してくれるでしょう)

密度濃過ぎ?

一応一通り読みましたよ〜。 ちょっと分量から行くと内容が詰め込みすぎって感は否めない。 ただ、 Scheme を知らない人からすると簡単そうな印象は与えられたかも。 たったあれだけだし。 一方で Perl や Ruby をすでに使ってる人からすると、是非使ってみようとまでは いかないかなぁ。(個人的にはあんまりメジャーになってほしいとは思ってないけど) あの量に納めるために、かなりの文章を捨て去ったりもしたんでしょうね。cut-sea

ハードコアLisperの作業風景は

こんばんは。わたしはまだまだ Scheme の入門者ですが、とても面白く読ませて頂きました。 別の機会にでも、「ハードコアLisper」の実際の作業風景をもっと描写して頂けると、 Scheme の魅力がより伝わるかと思いました。それでは。

柔軟性と制限とのバランス

システムというのは柔軟な所と制限されて引きしまった所のメリハリが必要と ならったことがありますが、 Lisp マシンと聞くと柔軟さの塊というイメージがあります。 Lisp 系の言語の、新しい言語を作れる程の柔軟性はとても魅力的なのですが、 型チェックなどのバグを入れないように制限する手段は自分で作らなくては ならないのでしょうか? バグのない Lisp コードを書くためには、たとえ Lisper だとてなんらかの テクニックを使っていると思うのですが。

AOP、Java

2003/06/14 23:10:48 PDT 職場では、責任とか保証とか言い出すもんだから、 柔軟性を活かす事を制限されてしまったりして、悲しい目に遇いますね。 実は自分を縛ってるって気付かないのが、ほげ上司/ほげ企業なのかも。

Overrideの考え方を、Classとかに縛られず好きな個所(手続き?)で使えるならば、 AOPに近いものになるような気がします。つまり、Classがこんなにも働き過ぎでなければ、 AOP用の処理系をわざわざ作るまでもなかったんじゃないかと>AspectJ(藁

Javaは、良くも悪くも、Cの改良というか後継なんだろうな。 C勢力(communityかも)を取り込み、かつてC勢力が楽に実現できなくて困ってた夢を実現してあげてるような気が。 だから思考が、Cに(古典的発想で)OOPを追加したモノ、に留まる。

単体テスト

Lisp 用の単体テストとして LispUnit(xUnit) のようなサポートツールはあるのでしょうか?(q)

コラム3の「Scheme プログラムの開発は...あまり本格的なデバッガの必要性を感じることはない」という点はなにかひっかかりを感じました。Lisper ではないわたしの推測としては、 「関数型言語では、そもそもバグが入りこまないように副作用なく記述することがコモンセンスとして あるために、自然と品質が高いソースを書くことができる」?(q)

さほど複雑ではないプロダクトコードを書く身としては、高度でスキルが必要なソースより、 Unit Test と Pair Programming (XP)によって誰でも編集できるソースのほうが嬉しいです。 OOP というのは決してベストでも何でもないですが、保守性は上げられるかと思います。(q)

test.scm, xUnit よりも Perl の Test ライクのフレームワークですね(q)

dow.scmに1・2月の日付を指定すると...

いまさらながら、バックナンバーを手に入れて勉強させてもらってます。ところで、サンプルプログラムの「dow.scm」なんですが、引数の月を1・2月に指定すると、ありえない日付が表示されちゃってます。(例を挙げれば、$ dow.scm 0 1 1 を入力すると、-1/13/1(日)と表示されます。) 1・2月は周期をもとめる都合上13・14月に、そして西暦をデクリメントされているように見受けるのですが、その値をそのままprintで表示しちゃっているようです。ただ、これをバグというには単純すぎる気がしてしまって、これはもしや、なんらかの意図をもった故意なのでは? とも勘ぐってしまうのですが、真相はどうなんでしょうか? -- emeitch (2005/07/27 09:56:44 PDT)

(define year*  (if (<= month 2) (- year 1) year))
(define month* (if (<= month 2) (+ month 12) month))

;; 曜日計算で year, monthのかわりにyear*, month*を使用
More ...