【问题标题】:Prolog: take a list of two elements, return true if and only if the first element is same as secondProlog:获取两个元素的列表,当且仅当第一个元素与第二个元素相同时返回true
【发布时间】:2012-12-06 01:15:49
【问题描述】:

我是新手 prolog 程序员,对于作业,我必须有一个基本程序,当且仅当列表 X 是两个元素的列表时成功,第一个元素与第二个元素相同。

从我的prolog来看,程序似乎很小,所以我输入了这个:

firstPair(x,x).

当我在 swipl 下运行它时,我得到这个作为输出:

Syntax error: Operator expected

还有什么需要做的吗?我想如果我执行这个,比如 firstPair(1,2)。这就是它需要知道它是假的。

【问题讨论】:

  • 从您的描述中不清楚错误消息的来源:至少您显示的程序是有效的语法。
  • 我认为你误解了你的任务:你需要写一个 firstPair(X) (注意 single 参数)。那么 X 需要具备什么样的“形状”?

标签: list prolog duplicates


【解决方案1】:

首先,小写的x 不是变量,它是一个原子。将x设为大写以解决问题:

firstPair(X,X).

其次,您不要将其输入到解释器中。相反,您将其写入文件firstPair.pl,然后将该文件读入Prolog。

在命令提示符下,键入:

['firstPair.pl'].

按回车键。现在您可以使用 firstPair/2 规则了。

最后,既然作业讲的是列表,我想导师希望你写firstPair/1,而不是firstPair/2

firstPair([X,X]).

【讨论】:

  • @false 看来这毕竟是问题所在 :)
  • @user1768884:如果您(像我一样)喜欢不那么杂乱的语法,请注意 ?- [firstPair]。会起作用的。
【解决方案2】:

你的计划/事实

firstPair(X,X).

如果给定的两个参数可以统一,则将成功,无论它们是列表、原子、变量等。为了满足您的规范,一个

当且仅当列表 X 是两个元素的列表时成功的程序, 第一个和第二个一样。

你需要这样的东西:

list_of_two_elements( [X,X] ).

如果传递一个单独的term,这将成功,该term是(或可以统一的)两个相同或可以通过统一的元素的列表。例如,以下所有操作都会成功:

  • list_of_two_elements( X ).

    如果成功,变量X 将与包含相同未绑定变量的两个元素的列表统一,类似于[V1,V1]

  • list_of_two_elements( [1,1] ).

  • list_of-two_elements( [1,X] ).(成功后,这里的X会与整数1统一。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多