CommonLisp Scheme Part12
■ このスレッドは過去ログ倉庫に格納されています
0023デフォルトの名無しさん
NGNGこんな感じでよいのかな?
もうちょっとちゃんとしたやつは時間がないから今は書けん。
このままでは(lamda arg ...)とか(lamda (arg . rest) ...)とかはだめだよん。
(define quotify-rest
(lambda (ids vars expr)
(if (pair? expr)
(cons (quotify-head ids vars (car expr))
(quotify-rest ids vars (cdr expr)))
expr)))
(define quotify-head
(lambda (ids vars expr)
(if (pair? expr)
(cond
((eq? (car expr) 'lambda)
(list 'lambda (cadr expr) (quotify-head ids (append (cadr expr) vars) (caddr expr))))
(else (cons (quotify-head ids vars (car expr))
(quotify-rest ids vars (cdr expr)))))
(if (and (memq expr ids) (not (memq expr vars)))
(list 'unquote expr)
expr))))
(define quotify
(lambda (ids expr)
(list 'quasiquote (quotify-head ids '() expr))))
■ このスレッドは過去ログ倉庫に格納されています