Ошибка "Недопустимый аргумент 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))
          ...

Т.е. отсутствует одна цитата.

Другие вопросы по тегам