Недопустимая ошибка аргумента 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 — список, описывающий порядок станций. в линиях метро (формат (l01 Sol Opera 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)

person jesusiniesta    schedule 19.12.2010    source источник


Ответы (2)


Вам нужно будет вставить обратную трассировку.

Но когда я это прочитал, ошибка в основном говорит о том, что там, где Лисп ожидал предиката, он получил какие-то векторные данные.

Обычно это происходит из-за того, что некоторые аргументы находятся в неправильном положении.

person Rainer Joswig    schedule 19.12.2010
comment
Обратные следы, которые я получаю, действительно очень длинные, если я не смогу это исправить, я попытаюсь получить короткий. Ваше объяснение, кажется, имеет смысл, я проверю это. Спасибо. - person jesusiniesta; 19.12.2010
comment
Исправлено! Большое спасибо! Это была ошибка в предыдущей функции. - person jesusiniesta; 19.12.2010

Первая функция, как ветвь else выражения if, у вас есть

        (remove-duplicates
          (remove-if #(lambda(x)(eq x estacion))
          ...

я подозреваю, что вы хотите

        (remove-duplicates
          (remove-if #'(lambda(x)(eq x estacion))
          ...

То есть отсутствует одна кавычка.

person huaiyuan    schedule 19.12.2010
comment
Не знаю актуально ли, но исправлено. Спасибо! - person jesusiniesta; 19.12.2010
comment
верно, это ошибка. Без кавычек мы получаем вектор. Хороший улов. - person Rainer Joswig; 19.12.2010