【问题标题】:"Invalid EXCL::PREDICATE argument" error in Common LispCommon Lisp 中的“无效的 EXCL::PREDICATE 参数”错误
【发布时间】:2010-12-19 18:30:12
【问题描述】:

我正在使用 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)

【问题讨论】:

    标签: lisp common-lisp allegro-cl


    【解决方案1】:

    您需要粘贴回溯。

    但是当我读到它时,错误基本上是说 Lisp 期望一个谓词的地方,它得到了一些矢量数据。

    这通常是因为某些参数的位置错误。

    【讨论】:

    • 我得到的回溯真的很长,如果我不能修复它,我会尝试得到一个短的。你的解释似乎有道理,我会检查一下。谢谢。
    • 已修复!非常感谢!就是之前函数中的那个错误。
    【解决方案2】:

    第一个函数,作为if表达式的else分支,你有

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

    我怀疑你想要

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

    即,缺少单引号。

    【讨论】:

    • 我不知道它是否相关,但已修复。谢谢!
    • 对,这是一个错误。没有引号,我们得到一个向量。很好的收获。
    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 2011-09-05
    相关资源
    最近更新 更多