LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

А здесь, правда через глобальную область, уже можете.

Это не внутренний скоп, а глобальный. Твой код абсолютно идентичен:

(define a 1)
(define tst (lambda(x) (+ a x)))
(define tst2 (lambda(x) (if (eq? x 'a) (set! a 10)) (write (tst 1))))

Если надо иметь общий скоп для tst и tst2, то его можно явно описать

(define-values (tst tst2)
  (let ((a 1))
    (values
      (lambda(x) (+ a x)))
      (lambda(x) (if (eq? x 'a) (set! a 10)) (write (tst 1))))))

И да, определить в другом месте ещё одну функцию, которая могла бы менять этот скоп (переменную a) ты уже не сможешь.

Исправление monk, :

А здесь, правда через глобальную область, уже можете.

Это не внутренний скоп, а глобальный. Твой код абсолютно идентичен:

(define a 1)
(define tst (lambda(x) (+ a x)))
(define tst2 (lambda(x) (if (eq? x 'a) (set! a 10)) (write (tst 1))))

Если надо иметь общий скоп для tst и tst2, то его можно явно описать

(define-values (tst tst2)
  (let ((a 1))
    (values
      (lambda(x) (+ a x)))
      (lambda(x) (if (eq? x 'a) (set! a 10)) (write (tst 1))))))

И да, определить в другом месте ещё одну функцию, которая могла бы менять этот скоп (переменную a) ты уже не сможешь.

Исходная версия monk, :

А здесь, правда через глобальную область, уже можете.

Это не внутренний скоп, а глобальный. Твой код абсолютно идентичен:

(define a 1)
(define tst (lambda(x) (+ a x)))
(define tst2 (lambda(x) (if (eq? x 'a) (set! a 10)) (write (tst 1))))

Если надо иметь общий скоп для tst и tst2, то его можно явно описать

(define-values (tst tst2)
  (let ((a 1))
    (values
      (lambda(x) (+ a x)))
      (lambda(x) (if (eq? x 'a) (set! a 10)) (write (tst 1))))))