标签: prolog-toplevel

Prolog中"false"和"no"之间的区别是什么?

我开始学习Prolog之后的Prolog 编程:使用ISO标准.在介绍到,他们所作的断言语言的7页:"在序言答案没有被用来指没有与问题相结合,以记住,这是非常重要的.没有是不一样的错误." 那么为什么SWI-Prolog使用falsetrue语句代替yesno

prolog swi-prolog prolog-toplevel

5
推荐指数
1
解决办法
2162
查看次数

PROLOG查询中是/否返回

我刚学序言和我有困难的时候理解为什么,我在"是/否"的结局进行结果查询.这是我的KB:

male(albert).
male(bob).
male(bill).
male(carl).
male(charlie).
male(dan).
male(edward).

female(alice).
female(betsy).
female(diana).

parent(albert, bob).
parent(albert, betsy).
parent(albert, bill).

parent(alice, bob).
parent(alice, betsy).
parent(alice, bill).

parent(bob, carl).
parent(bob, Charlie).
Run Code Online (Sandbox Code Playgroud)

然后我执行以下查询:

 ?-female(X).
Run Code Online (Sandbox Code Playgroud)

返回:

X = alice ? ; 
X = betsy ? ;
X = diana
yes
Run Code Online (Sandbox Code Playgroud)

当我查询时:

 ?-parent(X, bob).
Run Code Online (Sandbox Code Playgroud)

我回来了:

 X = albert ?;
 X = alice ?;
 no
Run Code Online (Sandbox Code Playgroud)

为什么一个导致'是',另一个导致'否'?

prolog prolog-toplevel

5
推荐指数
1
解决办法
366
查看次数

使用管道(|)时列表中的统一顺序

我很难弄清楚统一是按什么顺序完成的。我有以下查询:

[X, like | Z] = [I, Y, Prolog, language].
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

X = I,
Z = [Prolog, language],
Y = like.
Run Code Online (Sandbox Code Playgroud)

然而,我期待的是:

X = I,
Y = like,
Z = [Prolog, language].
Run Code Online (Sandbox Code Playgroud)

Prolog 统一术语是否有任何特定顺序?

编辑: 我有一种感觉,Prologan atom with a variablea variable with an atom. 是这样吗?

prolog prolog-toplevel

5
推荐指数
0
解决办法
54
查看次数

如何在SWI-Prolog中扩展结果列表?

?- length(L,25).
L = [_G245, _G248, _G251, _G254, _G257, _G260, _G263, _G266, _G
269|...].
Run Code Online (Sandbox Code Playgroud)

如果我在长度谓词后面使用write(L),则解释器将列表打印两次,一次展开而另一次不展开.

list prolog prolog-toplevel

4
推荐指数
1
解决办法
5014
查看次数

如何在Prolog中返回变量结果和true/false?

这听起来很愚蠢,但是让我说我​​的谓词最大/ 2返回列表中最大的元素...输出应该如下所示:

?- largest([1,2,3,4,5], X).
X = 5.
false.
Run Code Online (Sandbox Code Playgroud)

我实现了最大,它的工作方式与上面类似,但不输出"false".我怎么做它所以它也输出这个"假".值?这是一个烦人的任务,我必须完成.:(

prolog swi-prolog prolog-toplevel

4
推荐指数
1
解决办法
5279
查看次数

理解规则 - 错误作为答案

我是Prolog的新手,我只是在想,为什么这个规则在一个真实之后给我错误的结果.

likes(1,banana).
likes(1,mango).

test :- likes(1,banana),likes(1,mango).

?- test.  
true;  
false.
Run Code Online (Sandbox Code Playgroud)

我想知道这种错误背后的原因.

prolog prolog-toplevel

4
推荐指数
1
解决办法
5128
查看次数

在SWI-Prolog中获得多种解决方案

我是SWI-Prolog的初学者(但是有Borland Prolog的经验),并且对于以下测试代码,我遇到了奇怪的行为:

test(10).
test(1).
Run Code Online (Sandbox Code Playgroud)

预计查询?-test(A)将获得2个解决方案,例如A = 10; A = 1。但是,只有A = 10产生。我在这里不使用切割。也许SWI-Prolog中默认关闭了回溯功能?

提前致谢

prolog prolog-toplevel

4
推荐指数
1
解决办法
2410
查看次数

为什么来自swipl的反应不一致?

我想了解为什么与之交互swipl似乎不一致.

这是一个典型的例子.假设我查阅了包含以下定义的知识库:

acc_max([H|T], A, Max) :- H  > A, acc_max(T, H, Max).
acc_max([H|T], A, Max) :- H =< A, acc_max(T, A, Max).
acc_max([], A, A).

max([H|T], Max) :- acc_max(T, H, Max).
Run Code Online (Sandbox Code Playgroud)

下面我显示max([0, 1, 2], X).在输入提示符后我的屏幕显示的内容,并点击Enter:

?- max([0, 1, 2], X).
X = 2 ?
Run Code Online (Sandbox Code Playgroud)

(?表示光标的位置.)

请特别注意,解释器的下一个提示尚未出现.

这是我输入后屏幕的样子;:

?- max([0, 1, 2], X).
X = 2 ;
false.

?- ?
Run Code Online (Sandbox Code Playgroud)

现在我终于得到了翻译的提示.

相比之下,下面我显示了max([2, 0, 1], X).在输入提示符后我的屏幕显示的内容,并点击Enter:

?- max([2, …
Run Code Online (Sandbox Code Playgroud)

prolog swi-prolog prolog-toplevel

2
推荐指数
1
解决办法
121
查看次数

重定向标准输出流

如何将listing/0SWI-Prolog REPL 的输出写入文件?

?- listing > file.txt.
Run Code Online (Sandbox Code Playgroud)

file-io prolog prolog-toplevel

1
推荐指数
1
解决办法
435
查看次数

PROLOG - 如何舍入浮点数的小数?

我在知识库中有这一行:

height(Hipot,Y) :- Y is sin(pi/6)*Hipot.
Run Code Online (Sandbox Code Playgroud)

它计算一个直角三角形的导管之一。

当向 Prolog 询问 的值时Y,即 cathetus,我得到一个不准确的数字:

?- height(1,Y).
Y = 0.49999999999999994.
Run Code Online (Sandbox Code Playgroud)

但实际值是1/2,所以应该输出0.5。我想不准确是因为使用了pi,但我想继续使用它,所以我如何舍入Y到 0.5?

floating-point prolog prolog-toplevel

1
推荐指数
1
解决办法
2105
查看次数

在终端中使用SWI-Prolog时无法使用上,下,左和右

使用prolog(swipl)时遇到问题,在终端中输入swipl后,当我按上,下,左键时,会显示类似'^ [[A ^ [[B ^ [[D ^ [[C]然后就在我的键盘上 有人可以解释为什么吗?以及如何解决。提前致谢!

prolog prolog-toplevel

1
推荐指数
1
解决办法
46
查看次数

修改SWI-Prolg顶层

是否可以对SWI Prolog的顶层进行修改?

prolog swi-prolog prolog-toplevel

-1
推荐指数
1
解决办法
107
查看次数