Q],[H,P

问题描述 投票:3回答:4

如何在prolog中建立一个谓词,接收一个数字和一个列表,我必须通过尾巴将数字插入列表中。

我试过在列表中用头部插入数字。insert(H,[P|Q],[H,P|Q]). 但我怎么能用尾部插入呢?

list prolog dcg difference-lists
4个回答
2
投票

S2

  • ,可以看成是 "凡是扩展到
  • S1

". 这个值被传递给

ins_tail([], N, [N]).
ins_tail([H|T], N, [H|R]) :- ins_tail(T, N, R).

它更新了它,并给出了

S3

3
投票

S2append/3.

S3 是一个参数 因为它也是 "无论延伸 S1",鉴于我们的规则。
但是...

1
投票

S1, S2

S3L-E 不一定 L投入E

L = [ V1, ..., Vn | E]

产出E-E在整个过程中,它们是统一的,在这个过程中也会发生回溯(你可以解析含糊不清的语法)。它们最终会与列表统一起来。E当我们遇到箭头右侧的列表时,差异列表就会发挥作用。E上面的规则被翻译成:X这意味着

E = [X|F]

将它的第一个参数与一个开放式的列表统一起来,这个列表的尾巴是 L-F其他规则将统一 F. 一般来说,你会发现 []εL 规则,这些规则与 L.[W1, ..., Wm |L]-E以上都是通过宏来完成的,一个典型的错误是试图在你的数据上调用一个辅助谓词,这就失败了,因为转换增加了两个参数(对

实际上是呼吁

). 您必须在括号之间包围实际的身体

以避免把前缀当作规则。 --> 下面是另一种选择。

 sentence --> noun_phrase, verb_phrase.

© www.soinside.com 2019 - 2024. All rights reserved.