Переменная Common Lisp Unbound - PullRequest
       32

Переменная Common Lisp Unbound

2 голосов
/ 08 марта 2012

Можно ли использовать неинициализированную переменную в качестве аргумента функции?Для выполнения задания мне нужно использовать CLOS для написания семантической сетевой системы, и мой профессор включил тестовую функцию для проверки нашего вывода, и один из них указывает:

(print (def-concept Human)),

что подразумевает передачу аргумента Human в функцию def-concept.При запуске этой тестовой функции я не могу уйти от ошибки (в Allegro CL):

Error: Attempt to take the value of the unbound variable HUMAN'.

Поскольку это первая функция в тесте, естьнет инициализации каких-либо переменных до этого.Есть ли способ обойти передачу неинициализированной переменной в качестве аргумента функции?

Заранее спасибо.

1 Ответ

4 голосов
/ 08 марта 2012

Невозможно использовать унифицированное значение в качестве аргумента функции при обычном вызове функции Common Lisp. Common Lisp использует энергичную оценку: выражения аргументов приводятся к их значениям до вызова функции.

Я подозреваю, что вы не совсем понимаете структуру домашнего задания.

Если def-concept является функцией, которая ожидает значение, а human не определено, вы просто не можете проверить эту функцию.

Возможно, вы должны определить переменную human и затем загрузить файл, содержащий (print (def-concept human)).

То, что в этом же файле нет ничего до этой формы, не означает, что предварительная оценка невозможна. Другие файлы могут быть загружены перед этим файлом или формы, оцененные в слушателе.

...