【问题标题】:how to define the delete(X,L1,L2) relation using prolog where L2 is the resulted list in which item X is deleted from list L1如何使用 prolog 定义 delete(X,L1,L2) 关系,其中 L2 是从列表 L1 中删除项目 X 的​​结果列表
【发布时间】:2015-04-30 00:53:15
【问题描述】:

(1) 如何使用 Prolog 定义delete(X,L1,L2) 关系,其中L2 是从列表L1 中删除项目X 的结果列表

(2)如何绘制派生树来回答下面的查询?

| ?- delete(3,[4,10,6,8,1,3,9],L)

【问题讨论】:

  • 您应该展示您对解决此问题的尝试。还需要澄清一下:delete(X, L1, L2) 是从L1 中删除一个X 的实例,还是所有 个实例?
  • 我不确定我是否理解问题 #2。你要求一棵派生树,然后你展示了一棵。

标签: prolog


【解决方案1】:

使用 tfilter/3 和具体化的不等式dif/3 保存

?- tfilter(dif(3),[      4,    10,6,8,1,3,9],[4,10,6,8,1,9]).
true.
?- tfilter(dif(3),[3,3,3,4,3,3,10,6,8,1,3,9],[4,10,6,8,1,9]).
true.

请注意,这也适用于非基础术语!

?- tfilter(dif(Y),[A,B],Xs).
Xs = [   ], Y = A,    A = B    ;
Xs = [  B], Y = A,    dif(A,B) ;
Xs = [A  ], Y = B,    dif(B,A) ;
Xs = [A,B], dif(Y,B), dif(Y,A).

【讨论】:

  • 你所说的假是什么意思..它应该是真的..不是吗??..当我在 SWI 中编译它时,它得到的答案是真的。当我运行程序时,它得到的答案是 [4,10,6,8,1,9] 。那么你的意思是假的??
  • @thsumia。我指的是名为“false”的用户。我希望这不会造成太多混乱。
猜你喜欢
  • 2021-11-13
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 2022-12-15
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
相关资源
最近更新 更多