Ваш вопрос может быть подростком немного более конкретным, но я верю, что понимаю это.
В частности, ваш вопрос выглядит следующим образом:
"Я удивлен поведением
(define myenv (setup-environment))
(define-variable! 'a 13 myenv)
(lookup myenv 'a)
В частности, я ожидал, что он потерпит неудачу, потому что схемаэто вызов по значению. "Это ваш вопрос?
Если так, то я думаю, что смогу ответить на него.Вызов по значению не означает , что значения не могут изменяться.Это просто означает, что вызовы функций предполагают передачу значений от вызывающего к вызываемому.Фактически, почти все языки являются по значению;этот термин широко понимают неправильно.Java, например, также является языком вызова по значению.
Тогда в Scheme нет ничего, что мешало бы вам изменять или "изменять" значение.В этом примере вызов set-car!
изменяет список, на который ссылается.Это изменение затем видно любому коду, который может «видеть» это значение.
Я думаю, что ваш фундаментальный вопрос действительно имеет отношение к тому, что означает «вызов по значению», и я надеюсь, что япролить свет на это.