【问题标题】:swi prolog findall(\+z-AS-Sesio-Hsemana u-CU-Hsemana, between(1,NH,Sesio), C) gives errorswi prolog findall(\+z-AS-Sesio-Hsemana u-CU-Hsemana, between(1,NH,Sesio), C) 给出错误
【发布时间】:2015-10-30 19:50:11
【问题描述】:

我试图在 findall 中使用 2 个模板,但由于第一个模板和第二个模板之间的 ' ' 而出现错误,它要求我输入一个操作数,我输入 + 然后它将 C 显示为 template1 ' +' template2 但我不希望 + 出现在 C 上。

也试过了 findall((+z-AS-Sesio-Hsemana, u-CU-Hsemana), between(1,NH,Sesio), C)

但是Hsemana和u-CU-Hsemana之间的','也出现了,我只想要一个空格''。

【问题讨论】:

  • Prolog 语法不支持术语之间的空格/空格来形成复合术语。如果您只是关心使用空格而不是逗号将信息输出到屏幕上,那么捕获结果并编写一个谓词,使用writeprint 以您喜欢的格式将其写出。跨度>
  • 如果我打印 C 然后添加一些东西,它会打印:[C] something because C is a List
  • 如果C 是一个列表(例如,如果C[1,2,3])那么,是的,如果你是printwrite C,你会去获取[1,2,3],因为它就是这样。如果您想查看1 2 3,那么您必须编写一个接受列表的谓词,并将每个元素写出,后跟一个空格。如果这不是您想要的,那么您需要通过一些示例在您的问题中更详细地解释。请注意,findall 的目的是收集谓词的所有解决方案,它不是输出格式化工具。
  • 嗯,这不是我想要的,但我帮我解决了这个问题,谢谢!
  • 我很高兴它有帮助。 :)

标签: prolog logic prolog-findall


【解决方案1】:

感谢 lurker 对我的问题的评论,我找到了答案:

findall((+z-AS-Sesio-Hsemana), between(1,NH,Sesio), C), append(C,u-CU-Hsemana, C2), 用C2做点什么

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多