5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Lisp Scheme Part36

875 :デフォルトの名無しさん:2013/08/13(火) NY:AN:NY.AN
うえの方で話題になった、rubyにあるmethod_missingの件、実装してみた。
(存在しない関数を読んだ時に動的に処理する)

(defun cars () '(car cadr caddr))
(defun animals () '("dog" "cat" "elephant"))

(defun method-missing (name)
(let ((fn-str (symbol-name name)))
(if (equal (subseq fn-str 0 4) "CAR-")
(car (funcall (symbol-function
(intern (string-upcase (subseq fn-str 4)))))))))

(defmacro undefined-capable (&body body)
`(progn ,@(mapcar (lambda (sexp)
`(handler-case ,sexp
(undefined-function (var) (method-missing (cell-error-name var)))))
body)))

(undefined-capable
(car-cars)
(car-animals)
)
;=> "dog"

ただこれトップレベルでしか動かない。
(print (car-animals))も動くようにするには再起して
すべてのS式を包むしかない?いい方法あるのかな。

226 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)