Ошибка "Недопустимый аргумент EXCL::PREDICATE" в Common Lisp
Я делаю упражнения в классе в LISP, и я получаю эту ошибку
CG-USER(286):
Error: Invalid EXCL::PREDICATE argument:
#<Vector @ #x20fd488a>
[condition type: SIMPLE-ERROR]
Не могли бы вы сказать мне, что это должно означать? Я вставлю код с сообщением об ошибке, но он длинный и безобразный.
Он должен найти станции, следующие за данной, в мадридской сети метро, где ESTACION - это название станции, CAMBIO-ESTACION - список, описывающий короткие передачи (формат: (L01 Sol L02 Tribunal)), VIAS - список, описывающий порядок станций. в линиях метро (формат (101 Sol Sol 1.01)). Некоторые станции сломаны (те, что в AVERIADAS), и я должен найти закрытые станции (в прыжках PROFUNDIDAD-VECINOS).
Очевидно, я не ожидаю, что вы будете отлаживать мой код (это много уродливого кода для чтения), но было бы здорово, если бы кто-нибудь мог сказать мне, что эта ошибка должна означать. Благодарю.
Вот код:
Это выполнение с ошибкой:
CG-USER(286): (estaciones-cercanas-a 'Noviciado *vias* *cambio-estacion* 2 '(Sol Callao Noviciado Santo_Domingo PLAZA_DE_ESPAÑA SAN_BERNARDO RETIRO))
Error: Invalid EXCL::PREDICATE argument:
#<Vector @ #x20fd488a>
[condition type: SIMPLE-ERROR]
И это успешное исполнение:
CG-USER(288): (estaciones-cercanas-a 'Noviciado *vias* *cambio-estacion*)
(SANTO_DOMINGO SAN_BERNARDO PLAZA_DE_ESPAÑA)
2 ответа
Вам нужно будет вставить обратную трассировку.
Но когда я это прочитал, ошибка в основном говорит о том, что там, где Лисп ожидал предикат, он получал какие-то векторные данные.
Обычно это происходит потому, что некоторые аргументы находятся в неправильной позиции.
Первая функция, как ветвь else if
выражение, у вас есть
(remove-duplicates
(remove-if #(lambda(x)(eq x estacion))
...
Я подозреваю, что вы хотите
(remove-duplicates
(remove-if #'(lambda(x)(eq x estacion))
...
Т.е. отсутствует одна цитата.