- Lisp Scheme Part39
572 :デフォルトの名無しさん[sage]:2015/01/01(木) 01:05:56.25 ID:BLuAa79y - >>566
やめてどうすんの? なんか話題があるならお前が出せよ。
|
- Lisp Scheme Part39
574 :デフォルトの名無しさん[sage]:2015/01/01(木) 01:57:49.60 ID:BLuAa79y - >>573
面白いと思って話をしてると思うんだが、お前が面白くないと思うならお前が面白くするのが筋だろ。
|
- Lisp Scheme Part39
576 :デフォルトの名無しさん[sage]:2015/01/01(木) 05:11:40.10 ID:BLuAa79y - 融合変換とか?
そういうのって適用できるパターンを大量に持っておくしかないんじゃないの。 置換えパターンをユーザが定義可能にするという方法もあるけど…。 それ Common Lisp のコンパイラマクロだし。 http://www.lispworks.com/documentation/HyperSpec/Body/m_define.htm Haskell なんかだとそうとう豪快な変換をすると聞くけど、 動的型な Lisp ではどんな値を受取るか事前に何の保証もないので、 現実にはこういう泥臭い方法になってしまう。 理論家から見たらこれひどい仕組に見えるんじゃなかろうか。
|
- Lisp Scheme Part39
579 :デフォルトの名無しさん[sage]:2015/01/01(木) 21:21:12.94 ID:BLuAa79y - >>555
展開のタイミングの話じゃなくて、そのときに見える「環境」について。 R6RS ではライブラリ単位でメタレベルという名の指定を与えてそれを元に分離された環境を作る。 マクロ展開時に見える環境と実行時に見える環境は別物。 でも R6RS 処理系の中でもいくつかのアプローチにわかれてる。 まずひとつは明確に分離せずうやむやにしているタイプ。 実装をあまり読んでないけど sagittarius はこのタイプだと思う。 ふたつめはユーザのメタレベル指定に厳密に従って環境を分離するタイプ。 Larceny などはこれ。 みっつめは環境は分離するがメタレベル指定によってではなくプログラムの内容を見て自動的に決定する方法 (implicit phasing) 。 Chez とかはこのタイプ。 R6RS はメタレベルの解釈について厳密な定義を与えているものの、 レベルの不整合を受入れるような実装があってもよいという逃げ道も書いてあるので、 どの方針を取るか迷いがあるんだと思う。 もしコンパイラマクロやリーダマクロを Scheme に導入するとしたら更なる混迷の渦がまきおこるに違いない。
|