Scheme

ちょっと試し

関数合成とかで組み合わせたりした方がスマートに書けるなあという例が浮かんだけれども、そのコストが気になったりした。というか、そもそもGaucheにおいて(lambda (x) x)のコストてどんなもんだ。 gosh> (define (nest n) (let loop ((i 1) (f (lambda (x)…

Gauche + c-wrapper + SDL でつくるプレゼンソフト(3)

なんだっけな自動で画面サイズにでっかくテキストを表示するとこまで書いた。あと[bgImage:hoge.png]とかで画像を読みこめるようにした。画像読み込みは適当。元サイズで(0,0)に描画するだけ。あと上にテキスト領域かぶると白背景で塗り潰される。 SDL_ttfと…

Gauche, c-wrapper, SDL_imageを使用して画像を表示する例

http://konbu.s13.xrea.com/lib/lang/scheme/image.scm そのまんま、画像を表示するだけ。sdl_helper.cはc-wrapperのexample/sdlにあるもの。IMG_Loadしてるだけだなこれ。

Gauche, c-wrapper, SDL_ttfを使用してでっかいテキスト表示する例

高橋メソッド的プレゼンツールに大事なのは、自動ででっかいテキスト表示することです。 なので画面サイズにあった大きさのフォントサイズでフォントを開きたい。でもフォントサイズの単位はpt。画面サイズの単位はpx。ptってなんだよ。 http://www.mozilla.…

Gauche, c-wrapper, SDL_ttfを使用してテキスト表示する例

http://konbu.s13.xrea.com/lib/lang/scheme/showtext.scm コマンドラインで渡された文字列を表示する簡単な例。同じディレクトリにsdl_helper.c(c-wrapperのexample/sdlにあるもの)と、SDL_ttfが開けるフォントデータをfont.ttfとして置いてください。あとu…

Gauche + c-wrapper + SDL でつくるプレゼンソフト(2)

高橋メソッドみたいにでっかい自動ででっかいテキスト表示するところまでできた。 プログラミングGaucheを読み進めながらやっているので、書いてる時間が違う部分で全然違う書き方してたりすると思う。というか、Schemeのコードて書き方固まるほど書いたこと…

Gauche + c-wrapper + SDL でつくるプレゼンソフト(1)

gauche.nightで話してきたことを、卒研配属された研究室の合宿先で話すことになった。gauche.nightと客層が全然違う(あんまプログラミング言語萌え! な研究室じゃないし)から説明とか増量とかする必要ある。とかはまあいいんですけど「それでそのSchemeとか…

RubyでSchemeぽいの書く(4)

http://code.google.com/p/rbdsp/クロージャ書けるようになった! たぶん! C:\hoge\docs\rbdsp>ruby rbdsp.rb > (define mkcounter (lambda (x) (lambda () (set! x (+ x 1)) x))) mkcounter > (define c0 (mkcounter 10)) c0 > (define c1 (mkcounter 3)) …

RubyでSchemeぽいの書く(3)

はてダはっつけコード管理に限界を感じたのでGoogle Code Hosting使ってみた。Gmailアカウント持ってるだけで、おどろくほど簡単に使えた。選択できるLicenceにNYSLとかpublic domainとか無かったんで修正BSDライセンスになったらしいです。 http://code.goo…

RubyでSchemeぽいの書く(2)

明日数値計算の試験なので(まったく関係無い)Scheme実装がよく進んだ。 C:\hoge\docs\rbdsp>ruby rbdsp.rb > (+ 1 2 3 4) 10 > (eq? 3 (+ 1 2)) #t > (define ls (list 1 2 3)) ls > ls (1 2 3) > (eq? ls (list 1 2 3)) #f > ^Z good byeこのあたりまでわり…

lisp処理系ぽいものを書く(その6くらい)

実装言語を何故かD言語からC言語へ移行してみました。かなりアッサリできました。いかに俺がD言語の機能を有効に利用していなかったかの証拠だと思った。 記号表は適当にオープンなハッシュテーブルで書いてみました。ハッシュ関数とか超適当。GCのタイミン…

lisp処理系ぽいものを書く(その5くらい)

http://konbu.s13.xrea.com/lib/scm/istsp.d http://konbu.s13.xrea.com/lib/scm/istsp-20070922.tar.bz2 パーサ部分の構成を考えなおしたら、コードがかなりあっさりめに。quoteも簡単にできました。 > (+ 3 2 1 . (4 5)) 15 > '(1 2 3 '(1 2 3)) (1 2 3 (q…

lisp処理系ぽいものを書く(その4くらい)

コンスセル(a . b)を読めるように。あと忘れてたquote。 > (+ 3 2 1 . ()) 6 > (quote (1 2 3 . ())) (1 2 3)などと。ある程度できたんで、適当に演算実装してまわることもできるけど、まだまだ内部がいいかげんだらけなのでしない。でもやっぱりしたいよう…

いいかげんなLisp処理系ぽいの(3)

内部で引数の処理がとてつもなくいいかげんだったのを、かなりいいかげんくらいにした。あとlambdaできるようにしてみた。たぶん。ああ、でも可変長引数はできるようにしてない。(lambda x ...), (lambda (x y . z) ...) みたいの。 > (define fact (lambda …

lisp処理系ぽいの書いてみたり(その2くらい)

Schemeタグ付けるようなもんかよと思いつつ。syntaxぽいのもできるようにしてみた。ユーザ側から関数とかsyntax定義できないから意味無いけど。 ソースこのへん http://konbu.s13.xrea.com/lib/scm/istsp.d > (define a (+ 10 20 (* 3 8) (/ 9 3))) 57 > a 5…

MiniSchemeをD言語で書いてみたよ、と。

ちょーみじかいScheme処理系として有名なMiniSchemeをDに移植した。たぶん動く。 http://konbu.s13.xrea.com/lib/scm/miniscm-d-20070815.tar.bz2 ほとんどそのまま移しただけ。やったのは、先日の日記に書いたScheme関数に対応する関数を書いたことと、GCま…

MiniScheme 読んだり書きかえたり

miniscm.cを書き換えたりしてた。 miniscm.cをGNU GLOBALでHTML化したもの(オリジナルのminiscm.c) オリジナルのMinischemeでは各種Scheme関数をswitch-caseで呼んでいる。それぞれのScheme関数はopexe_0関数からopexe_6関数のどれかに属する。 オリジナル…

コード読み

ちっちゃな Scheme インタプリタMinischemeのコードをちょこちょこ読んでる。 いちおうひらメソッドの練習がてら。http://konbu.s13.xrea.com/wiki/index.cgi あんまし真面目にやってないけど。

define-syntax ためしてみる。

しばらく前からちょくちょく SICP 眺めてる。読み始めた頃からけっこう Scheme に興味あるんだけど、あいつは言語としては Scheme 使ってるけど、Scheme の本じゃない。そんなことに気がつくのに結構な時間がかかりました。というわけで、SICP 読み進めても…

リファレンスマニュアル

ウェブ上でリファレンスマニュアル的な文書ねーかなーと思った。そういえば、R5RS がある。 http://www.schemers.org/Documents/Standards/R5RS/ 気前良くそのまま印刷できる形でのファイルも提供してるし。印刷しておこう。 追記 書籍の「The Scheme Progra…

たぶんカリー化ってこんな感じのような気がする。 gosh> (define (curry p . args) (lambda r (apply p (append args r)))) curry gosh> (define hogecons (curry cons 'hoge)) hogecons gosh> (hogecons 'moge) (hoge . moge) gosh> (hogecons 'piyo) (hoge…

SICPを読む6

ちょっとずつでもやり続ければそのうち終わらーな。問題1.17から1.19

SICPを読もう5

ミッシングリンクを埋めようということで、問題1.14から1.16。あんま進まんかった。眠い。もずくうまい。

SchemeでBrainFuck その2

前回書いたBrainFuckインタプリタはかなりおそかった。与えられたbfコードをリストとして構築しなおしてから、さあ実行、とかやってたからだろうか。リストの扱いくらいしかわからなかったからそうなったのだが。 bfのコードはそのままstringとして扱った方…

Schemeで適当にBrainFuckインタプリタ

やらなければいけないレポートがあるという現実から目を逸らしてSchemeでBrainfuckインタプリタつくってたら朝になっていたのでやばい。Schemeでのまともなプログラムの書き方とかまず全然わからないのもほげ。目を背けたい事柄が無かったらたぶんわざわざSc…

SICPを読もう4 「1.3 高階手続きによる抽象」あたり

問題1.14 - 1.28 気分転換したくなったのでパス!問題1.29から1.33まで。高階手続きで抽象的に楽しもうというあたりで楽しもうと思います。

SICPを読もう3

大学生は好きに使える時間が多いなあと思う。12:10から16:15まで空きコマという。問題1.12、1.13をやった。

SICPを読む2

おもいがけず休日だったのでSICPの練習問題を解く。問題1.7から1.11まで。はいはい末尾再帰末尾再帰。反復的プロセスですね。このペースだといつやり終えるんだろうか。

SICPを読む。

学生のうちに読んでおけーという電波を受信したので噂に名高い、SICPことamazon:計算機プログラムの構造と解釈を読んでみる。英語版はハードカバーで固かったですが、日本語版はやわらかいですね。あと日本語なので読みやすいですね。 日本語訳がどうこうっ…

letとletrecの違いとか

自然言語でletとletrecの違いが書いてあるのを読んでもよくわからなんだ。自分で書いてみてわかった。 書いたのは与えられたリストをconsで再帰的に定義してそのまま返すだけの関数。

test