scheme

STklos

Pair に 3 word 使っちょる。しかも本当に 64-bit で動くのかこの code?

Algol Petrofsky, the self-pronounced ひまじ

syntax-rules で識別子を capture する方法

syntax-rules corner case 地獄その2 (3だっけ?)

ここ数週間、やる気が起きなくてなーーーーんもしてなかったけど、やっとこさ再開。いきなり灰色い code を思いつく。幸先がいいのか悪いのか。 ;; Shadow the binding of literal symbol foo with a) let and b) let-syntax (let-syntax ((macro (syntax-ru…

toplevel define

昨日の話題の続き。 # shiro 『その疑問は正しい。toplevel defineはSchemeのダークコーナーなのです。R5RSの7.2節のformal semanticsでは敢えて触れられていません (「処理系が都合の良いセマンティクスを選べる」ということです)。なお、defineの第2引数の…

internal define

(let ((a 1)) (define (f x) (define b (+ a x)) (define a 5) (+ a b)) (f 10))これで返ってくる値は幾らかという話。「R5RS では letrec と等価と書いてあるから code 自体が illegitimate」とは言ってみたものの、SICP がなぜ 20 を正しいとしているのか…

Corner case 地獄その1

思わず↑「その1」とか書いてしまうあたりがもうorzMacro の template 内で束縛されて改名された識別子を一旦 vector を通して submacro に渡してみる: (let ((x 'outside)) (let-syntax ((foo (syntax-rules () ((_) (let ((x 'inside)) (let-syntax ((bar (…

Macros That Work William Clinger, Jonathan Rees

Naïve にやると O(n^2) なのが let, lambda みたいな束縛構文を expander が認識すると O(n) になるよ、という話。多分。しかし sigscheme では束縛構文をいくらでも追加できるので、論文自体がただの嫌がらせでしかない。

Improper list の最後の項に名前が欲しい。 (a b c .. d . e) ^これ何か無いのかな? Terminator だと () の場合も含んでしまうし、terminator of improper list は長い。

三者三様 何か syntax に指定されてる識別子をいけない使い方すると、なんぼでも動作に違いが出るね。 jun@debian /dvl/uim/org/branches/r5rs/sigscheme $ scheme48 Welcome to Scheme 48 1.3 (made by Debian on Mon Aug 22 06:50:36 CEST 2005) Copyright…

どうでもいい考察というか感想というか偏見 Scheme48 R5RS とか SRFI への準拠度が高い (動作未定義の code を与えると reject するとかいう意味で)。でも program 構文を使わないと script を認識してくれないのは頂けない。Error message もぶっきらぼうで…

超個人的メモ。 syntax-rules は define-macro と違って、template 部を execute しない。むしろ C の macro みたいに source の字面を操作する感覚に近い。Template 内での自由変数は macro の定義箇所の context で解決され、pattern の placeholder に選…

やっちまった。Schemer level up?

↓の ARGS の話を書くにあたって確認したいことがあったので perl を起動。 $ perl @ary = (0 1 2); Number found where operator expected at - line 1, near "0 1" (Missing operator before 1?) Number found where operator expected at - line 1, near "…

CDR-coding と歴史

結局 30 年前の特許なのでとっくに期限切れてるみたい。 しかし、Gauche, Guile, Scheme48 どれを読んでも CDR-coding とか unrolled linked list みたいな圧縮表現使ってないなぁ。Gauche は Boehm GC と組み合わせるのが (performance-wise に) 難しそうだ…

Scheme scripting

amb てこういう使い方するもんなんだろうか。それ専用の (効率的な) 関数がありそうだけど、見当たらないし。assert っていうのは SICP でいう require。 (guard (exc ((eq? exc 'no-solution) #t)) (let ((type (amb "Syntax" "Procedure")) (args (amb "Fi…

Scheme は scripting では使いものにならない。

つい美しく書こうと欲が出て全然書き進まないから(顔 ;; SICP とか見てばっかり