> 1 <

Автор Сообщение

rv82

Members


Статус

46 сообщений
http://rv82.ya.ru
Где: Russia
Род занятий:
Возраст:

#708   2009-11-09 14:17 GMT+3 часа(ов)      
Здравствуйте! Я с Лиспом работаю недавно. И никак не могу понять, казалось бы, простую вещь. Имеется простой пример:
 
(defvar a 0)
(defvar b 0)
(defun sum3 ()
(let ((a 2) (b 3) (s (+ a b)))
s))
 

Почему-то, функция sum3 возвращает 0. Насколько я помню, в Scheme подобный пример возвращает 5.
Если (defvar a 0) и (defvar b 0) вообще убрать, то во время компиляции будут появляться предупреждения, а при вызове функции будет появляться ошибка (работаю с Clozure CL под win32).
Подскажите пожалуйста, как в Лиспе грамотно работать с локальными переменными?

archimag

Members


Статус

48 сообщений

Где: Russia
Род занятий:
Возраст:

#709   2009-11-09 15:23 GMT+3 часа(ов)      
Вычисления в let не зависят от порядка указания переменных, для этого надо использовать let*. Вот правильный вариант: http://lisper.ru/apps/format/43

bach74

Members


Статус

40 сообщений

Где: Russia Челябинск
Род занятий: программист
Возраст: 43

#710   2009-11-09 17:31 GMT+3 часа(ов)      
Добавлю. Присваивание в let называется "параллельное присваивание".
> 1 <


Онлайн :

0 пользователь(ей), 12 гость(ей) :




Реклама на сайте: