prolog - Prolog中的[]和[_]是什么意思

标签 prolog

我相信 [] 意味着接受空列表,而 [_] 接受可能包含任何内容的非空列表。但在某些上下文中,例如说一个函数:

f([]).
f[_]).
f([x|y]):-dostuff.

[x|y] 和 [_] 不会同时被调用吗,因为它们本质上意味着相同的事情?

最佳答案

在 Prolog 中,列表表示为链接列表。链表有两种“模式”:

  1. 空列表[];和
  2. “cons”[H|T]HT 参数与 H head 列表(第一个元素),T 列表尾部(包含剩余元素的列表)。

因此,我们可以呈现一个没有元素的列表,如 [],有一个元素,如 [H1|[]],有两个元素,如 [H1 |[H2|[]]],等等。

上面的符号有点冗长,可以使用列表语法糖。例如[H1, H2]相当于[H1|[H2|[]]],同样的方式[H1,H2|T] code> 相当于 [H1|[H2|T]]

因此,代码中的 [_][_|[]] 的语法糖。这意味着这是一个单例列表(一个恰好有一个元素_的列表),我们在这里不关心该值列表,只要它与该模式统一即可。

But then in some context such as say a function.

f/1 这里不是一个函数,它是一个谓词。这里意味着谓词 f/1 满足空列表、包含一个元素的列表(无论该元素是什么)以及列表 [X|Y] (我假设这些是大写标识符,否则只有当头部是常量 x 且尾部是常量 y 时才满足,这意味着它是并不是真正的列表)。

关于prolog - Prolog中的[]和[_]是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409962/

相关文章:

prolog - 具体化 call_with_time_limit/call_with_inference_limit

javascript - javascript 中的简单 Prolog 谓词

prolog - 如何使用 prolog 查找字符串长度

prolog - Prolog 中使用集合进行约束逻辑编程

prolog - 如何解决 Prolog 中的密码谜题

Prolog - 尝试解决文本难题

Prolog 初学者 - 这是一个坏主意吗?

prolog - 使用 prolog 格式谓词打印到文件

list - Prolog - 检查列表是否为空 []

prolog - Prolog 中的数字递增