Схема имеет только вызовы функции по значению. Есть и другие альтернативы, которые могут быть реализованы в языке, но если вы новичок, то лучше даже не пробовать их на этом этапе. Если вы ищете способ передачи значений «по ссылке», то один из вариантов, который может это сделать, - использовать макросы, но вам действительно не следует туда идти. Вместо этого некоторые реализации Scheme, такие как PLT Scheme, предоставляют «значение коробки»: это своего рода контейнер, который используется следующим образом:
- Вы создаете коробку, содержащую
<something>
с (box <something>)
- Вы получаете значение, которое хранится в поле с
(unbox <some-box>)
- Вы меняете значение, хранящееся в ящике, с помощью
(set-box! <some-box> <new-value>)
Учитывая эти два, вы можете использовать такие блочные объекты «по значению», но их содержимое на самом деле является справочным. Это очень похоже на C, где все значения (большинство, фактически) передаются по значению, но некоторые из этих значений могут быть указателями, которые вы можете изменять. Кстати, лучше избегать даже этого: в Схеме функциональное программирование является более распространенным выбором, и поэтому лучше начать с этого.
(Если вы более свободно владеете Схемой и используете Схему с достаточным количеством абстракций, вы также можете научиться имитировать множество альтернатив.)