История изменений
Исправление quasimoto, (текущая версия) :
Компилятор, естественно, не будет
SBCL:
(lambda (b) (+ 1 b))
; #<FUNCTION (LAMBDA (B)) {100490C6CB}>
(let ((a 1)) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {10048C808B}>
(let ((a (f))) (lambda (b) (+ a b)))
; #<CLOSURE (LAMBDA (B)) {10048F2C8B}>
(declaim (inline f))
(let ((a (f))) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {100499C4FB}>
CCL:
(lambda (b) (+ 1 b))
; #<Anonymous Function #x3020006E87EF>
(let ((a 1)) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x3020006E15EF>
(let ((a (f))) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x30200071696F>
(declaim (inline f))
(let ((a (f))) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x30200070ABEF>
(всё с максимальными оптимизациями).
Исходная версия quasimoto, :
Компилятор, естественно, не будет
SBCL:
(lambda (b) (+ 1 b))
; #<FUNCTION (LAMBDA (B)) {100490C6CB}>
(let ((a 1)) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {10048C808B}>
(let ((a (f))) (lambda (b) (+ a b)))
; #<CLOSURE (LAMBDA (B)) {10048F2C8B}>
(declaim (inline f))
(let ((a (f))) (lambda (b) (+ a b)))
; #<FUNCTION (LAMBDA (B)) {100499C4FB}>
CCL:
(lambda (b) (+ 1 b))
; #<Anonymous Function #x3020006E87EF>
(let ((a 1)) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x3020006E15EF>
; (let ((a (f))) (lambda (b) (+ a b)))
#<COMPILED-LEXICAL-CLOSURE #x30200071696F>
(declaim (inline f))
(let ((a (f))) (lambda (b) (+ a b)))
; #<COMPILED-LEXICAL-CLOSURE #x30200070ABEF>
(всё с максимальными оптимизациями).