【问题标题】:Prolog Recursive PredicatesProlog 递归谓词
【发布时间】:2018-10-09 05:18:09
【问题描述】:

在 Prolog 中给出递归定义: 定义一个包含参数 X 的谓词当且仅当 X 是一个列表,X 的长度是奇数。

多年来,我一直在尝试解决这个问题。我只是想为自己学习 ProLog,并在一本书中发现了这个问题。

我已经尝试过了,但它可能只适用于偶数长度的列表。

mult2_length( [] ).
mult2_length( [ _, _ | Xs ] ) :-
  mult2_length( Xs ).

谁能帮帮我?

【问题讨论】:

  • 你能发布一些你试过但不起作用的东西吗?如果您这样做,您将更快地获得更多帮助。
  • @Nick 我已经编辑它以显示我所做的事情

标签: recursion prolog predicates


【解决方案1】:

你必须有这样的谓词:

list([]) :- fail.
list([_]).
list([_,_|T]) :- list(T).

您只需不断从列表中删除 2 个元素,直到出现 0 或 1 个。

【讨论】:

  • 可以删除子句list([]) :- fail.。由于没有其他子句与空列表匹配,因此调用 list([]) 无论如何都会失败。
  • @IsabelleNewbie 当然,但是我发现我的代码对于新的 prolog 用户来说更容易理解,这就是为什么我逐行编写代码:)
  • 这就是我的猜测。恕我直言,对于初学者来说,重要的是要了解任何未明确定义为成功的事情都会失败,但您可能会以不同的方式看待它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多