相关疑难解决方法(0)

Prolog中'和'有什么区别?

我是Prolog的新手并注意到'和'给出了不同的行为,但我很好奇为什么.具体来说,加载文件时,?- ['test1.pl'].工作,而?- ["test1.pl"].不是.

prolog double-quotes dcg iso-prolog

41
推荐指数
2
解决办法
5536
查看次数

Prolog DCG语法规则中的堆栈溢出:如何有效或懒惰地处理大型列表

我正在解析一个由一系列行组成的相当简单的文件格式,每行都有一些空格分隔的字段,如下所示:

l 0x9823 1
s 0x1111 3
l 0x1111 12
?
Run Code Online (Sandbox Code Playgroud)

我正在使用SWI-Prolog.这是我到目前为止的DCG:

:- consult(library(pure_input)).

load_trace(Filename, Traces) :-
    phrase_from_file(trace_file_phrase(Traces), Filename).

trace_file_phrase([]) --> [].
trace_file_phrase([T|Ts]) --> trace_phrase(T), trace_file_phrase(Ts).

trace_phrase(access(Type, Address, SinceLast)) -->
    access_type(Type), space,
    address(Address),  space,
    nat(SinceLast),    newline.

access_type(load)  --> "l".
access_type(store) --> "s".

address(Number) --> "0x", hexnum(Number).

hexdigit(N)  --> digit(N).
hexdigit(10) --> "a". hexdigit(11) --> "b". hexdigit(12) --> "c".
hexdigit(13) --> "d". hexdigit(14) --> "e". hexdigit(15) --> "f".
hexnum(N) --> hexdigit(D), hexnum(D, N).
hexnum(N, N) --> [].
hexnum(A, N) --> hexdigit(D), …
Run Code Online (Sandbox Code Playgroud)

prolog swi-prolog dcg

16
推荐指数
3
解决办法
2451
查看次数

Prolog得到字符串的头尾

我正试图将我的大脑第一次包裹在Prolog(SWI-Prolog),我正在努力克服我确定的基础知识.我正试图拿一个像"馅饼"这样的字符串并打印出军事北约拼写它看起来像这样:

spellWord("Pie").
Papa
India
Echo
Run Code Online (Sandbox Code Playgroud)

目前我只是想验证我正在使用[H | T]语法和Write函数.我的功能是:

spellWord(String) :- String = [H|T], writeChar(H), spellWord(T).

writeChar(String) :- H == "P", print4("Papa").
Run Code Online (Sandbox Code Playgroud)

打电话时spellWord("Pie").这当前只返回false.

string list prolog dcg

7
推荐指数
2
解决办法
1461
查看次数

Prolog DCG:找到最后一个元素

我想更好地了解DCG的使用.为了做到这一点,我尝试将LearnPrologNow书中的一些练习翻译成DCG表示法.但是,我失败了.

我试图编写一个程序,只列出列表中的最后一个元素.就这样.我只是想不出正确的DCG语法来做到这一点.我想我找出了应该是的"基本案例":

最后 - > [X | []].

其中X是最后一个元素.如何让Prolog以递归的方式进入列表?或者我是否以错误的方式思考DCG?

prolog dcg

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

Prolog 中的选择点和重做

此处询问有关何时Redo在 Prolog 中使用新变量调用a或何时尝试使用相同变量的问题后,我想我想通了。然而,在下面的一段代码中,我认为Redo要调用一个额外的代码,但事实并非如此。

我的知识库如下:

location(desk,office).
location(apple,kitchen).
location(flashlight,desk).
location('washing machine',cellar).
location(nani,'washing machine').
location(broccoli,kitchen).
location(crackers,kitchen).
location(computer,office).

edible(apple).
edible(crackers).
Run Code Online (Sandbox Code Playgroud)

我的查询是

?-location(X,kitchen),edible(X).
Run Code Online (Sandbox Code Playgroud)

具有以下跟踪:

   Call: (9) location(_5612, kitchen) ? creep
   Exit: (9) location(apple, kitchen) ? creep
   Call: (9) edible(apple) ? creep
   Exit: (9) edible(apple) ? creep
X = apple ;
   Redo: (9) location(_5612, kitchen) ? creep       <====
   Exit: (9) location(broccoli, kitchen) ? creep
   Call: (9) edible(broccoli) ? creep
   Fail: (9) edible(broccoli) ? creep
   Redo: (9) location(_5612, kitchen) ? creep …
Run Code Online (Sandbox Code Playgroud)

prolog choice-point

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