LISP Scheme Part4
レス数が900を超えています。1000を超えると表示できなくなるよ。
0910デフォルトの名無しさん
NGNG*dot-hook*というドット連結シンボルを読みこみ時に呼び出される
フック関数があるとしたら、こんな感じになる。
;argsはドットから切り離されたシンボルのリスト
(define (*dot-hook* args)
(let loop ((x (cdr args))(expand (car args)))
(if (pair? x)
(loop (cdr x)
(if (pair? (cdr x))
;ドット連結が続くなら1引数を取る関数しか使えない
(list (car x) expand)
;最後のシンボルに対しては外部から引数を取ることができる様にする
`(lambda args (apply ,(car x) (cons ,expand args)))))
expand)))
>(define a 'string)
>(a.symbol->string.string-append "-append")
=>"string-append"
(a.symbol->string.string-append "-append")
は
((lambda args (apply string-append (cons (symbol->string a) args))) "-append")
と変換される。
名前でアクセスする必要がある&途中の関数に対しては1引数しか取れない、
という限定的なものだけど。
レス数が900を超えています。1000を超えると表示できなくなるよ。