История изменений
Исправление monk, (текущая версия) :
Как это не приходится, на ракете можно реализовать `unwind-protect` без изменения ядра компилятора?
Он называется dynamic-wind.
Ну так ты у себя это спрашивай, твои примеры были про гигиенические макросы и call/cc.
ОК. Какую альтернативную реализацию этих возможностей можно придумать, которая была бы лучше той, что уже есть в ядре схемы?
_использующие данную реализацию_
Тогда придётся либо использовать только функции из CL, либо писать что-то вроде
(defun (f-let-if f1 f2)
(let ((temp (f1))
(if temp temp (f2))))
(defmacro my-or (&rest args)
(cond
((null args) nil)
((null (cdr args)) (car args))
(t (let ((f-let-if #'f-let-if))
`(funcall ,f-let-if
(lambda () ,(car args))
(lambda () (my-or ,@(cdr args)))))))
Исправление monk, :
Как это не приходится, на ракете можно реализовать `unwind-protect` без изменения ядра компилятора?
Он называется dynamic-wind.
Ну так ты у себя это спрашивай, твои примеры были про гигиенические макросы и call/cc.
ОК. Какую альтернативную реализацию этих возможностей можно придумать, которая была бы лучше той, что уже есть в ядре схемы?
_использующие данную реализацию_
Тогда придётся либо использовать только функции из CL, либо писать что-то вроде
(defun (f-let-if f1 f2)
(let ((temp (f1))
(if temp temp (f2))))
(defmacro my-or (&rest args)
(cond
((null args) nil)
((null (cdr args)) (car args))
(t (let ((f-let-if #'f-let-if))
`(funcall ,f-let-if
(lambda () ,(car args))
(lambda () (my-or @,(cdr args)))))))
Исправление monk, :
Как это не приходится, на ракете можно реализовать `unwind-protect` без изменения ядра компилятора?
Он называется dynamic-wind.
Ну так ты у себя это спрашивай, твои примеры были про гигиенические макросы и call/cc.
ОК. Какую альтернативную реализацию этих возможностей можно придумать, которая была бы лучше той, что уже есть в ядре схемы?
_использующие данную реализацию_
Тогда придётся либо использовать только функции из CL, либо писать что-то вроде
(defun (f-let-if f1 f2)
(let ((temp (f1))
(if temp temp (f2))))
(defmacro my-or (&rest args)
(cond
((null args) nil)
((null (cdr args)) (car args))
(t (let ((f-let-if #'f-let-if))
`(funcall ,f-let-if
(lambda () ,(car args))
(lambda () (my-or @(cdr args)))))))
Исходная версия monk, :
Как это не приходится, на ракете можно реализовать `unwind-protect` без изменения ядра компилятора?
Он называется dynamic-wind.
Ну так ты у себя это спрашивай, твои примеры были про гигиенические макросы и call/cc.
ОК. Какую альтернативную реализацию этих возможностей можно придумать, которая была бы лучше той, что уже есть в ядре схемы?
_использующие данную реализацию_
Тогда придётся либо использовать только функции из CL, либо писать что-то вроде
(defun (f-let-if f1 f2)
(let ((temp (f1))
(if temp temp (f2))))
(defmacro my-or (&rest args)
(cond
((null args) nil)
((null (cdr args)) (car args))
(t (let ((f-let-if #'f-let-if)
(lambda #'lambda))
`(f-let-if (,lambda () ,(car args))
(,lambda () (my-or @(cdr args)))))))