查询的条件是什么才能成为True?

时间:2017-09-09 09:22:01

标签: prolog

我是Prolog的新手并试图弄清楚它是如何运作的。所以任何人都可以帮助我使用以下代码:

whatisthis([]).
whatisthis([_, b| L]):- whatisthis(L).

那么Prolog什么时候回归' True'如果查询具有以下格式:

?- whatisthis(X).

我尝试了一些不同的输入和唯一返回的' True'是X = []。

1 个答案:

答案 0 :(得分:2)

此查询甚至是您可以查询X将为何的声明:

?- whatisthis(X).
X = [] ;
X = [_G1242, b] ;
X = [_G1242, b, _G1248, b] ;
X = [_G1242, b, _G1248, b, _G1254, b] ;
X = [_G1242, b, _G1248, b, _G1254, b, _G1260, b] ;
X = [_G1242, b, _G1248, b, _G1254, b, _G1260, b, _G1266|...]

如果你按分号; ,它将发出下一个结果。 _Gxxxx部分是未绑定的变量。你可以在那里写任何东西。

因此每个X都是 的偶数长度列表,其中每个第二个元素都是b 。因此,以下示例将成功:

[]
[a, b]
[2, b]
[1, b, 4, b]
[a, b, 1, b]
[f(a,b), b, b(f,a), b]
[1, b, 4, b, 2, b, 5, b]