2017-04-01から1ヶ月間の記事一覧

syntax-rulesの同じ深さの<ellipsis>

同じ深さので、違う場所で宣言された場合どうなるのか確認した。 多くの処理系では、短いほうが優先される。 (define-syntax foo (syntax-rules () ((_ ((a ...) ...) (( b ... ) ... )) (quote ( ((a b) ...) ... ))))) (display (foo ((a b)(c d e)) ((A B…

Schemeでライブラリを定義するぞ

Schemeのr7rsにはライブラリを定義する構文がある。 例↓ (define-library (niyarin test) (import (scheme base)) (export foo1 foo2) (begin (define (foo1 a) (+ a 1 )) (define (foo2 a) (- a 1)))) Schemeのライブラリ名は、ライブラリを一意に判別する…

dynamic-wind。

dynamic-windについてまとめた。 dynamic-windのつかいかた (dynamic-wind before thunk after) 引数はすべてthunk(引数0の手続き)。 before、thunk、afterの順に実行する。 ただし、真ん中のthunkで継続を取り出して外側から呼び出した場合や中から外側の継…

raiseとraise-continuableとwith-exception-handler。

Scheme(R7RS)の例外の発生とハンドラについてまとめた。 with-exception-handerで例外ハンドラを登録し、raise、raise-continuableで例外を発生させる。 raiseとraise-continuableの違いは、handlerを呼び出した後での処理に違いがある。 with-exception-han…