45得票5回答
在Prolog中使用cut的时机

我曾经学过一门课程,在这门课程中我学习了一些Prolog的知识。然而,我无法弄清楚何时/如何使用cuts(剪枝)。尽管我能理解cuts的基本思想,但我似乎无法正确地使用它们。 有人能简要解释一下或者推荐一个好的"cuts"教程(不是learnprolognow.org)吗?

20得票6回答
一组字符串的最长公共前缀(LCP)

lcs([ H|L1],[ H|L2],[H|Lcs]) :- !, lcs(L1,L2,Lcs). lcs([H1|L1],[H2|L2],Lcs):- lcs( L1 ,[H2|L2],Lcs1), lcs([H1|L1], L2 ,Lcs2),...

20得票1回答
Prolog - 红剪枝和绿剪枝的区别

我开始学习Prolog,并希望让整个剪枝过程更清晰。我已经读到过“绿色剪枝不会改变程序的声明性含义,而红色剪枝则会这样做”。但是,程序的含义并不完全是声明性的(因为Prolog实际上会为所有选项进行回溯)。 以下是一个示例:p(1). p(2) :- !. p(3). 有人说这是绿色的切割。...

18得票3回答
在Prolog中进行解析而不使用cut?

我在这里找到了一个很好的用于在Prolog中解析Lisp的代码片段(来源:这里):ws --> [W], { code_type(W, space) }, ws. ws --> []. parse(String, Expr) :- phrase(expressions(Expr)...

12得票4回答
Prolog中的剪切操作符与append操作

当我们使用剪切操作符和追加操作符时,会出现什么问题? append2([],L,L):-!. append2([H|T],L,[H|TL]):-append2(T,L,TL). 我尝试了几种不同的输入,但它总是成功的。 ?- append2([1,2],[5],L). L ...

11得票1回答
Prolog中的"!"是什么意思?

有人能解释一下 Prolog 中的 "!" 是什么意思吗?我不理解。 这里有一段代码,可以计算一个异构列表中有多少个子列表具有山脉特征。 nrSubliste([], 0). nrSubliste([H|T], R):- is_list(H), munteMain(H),!,...

10得票2回答
编程中的削减是不好的吗?

我这学期正在学习AI课程,其中我们正在学习Prolog。我们的讲师告诉我们尽量避免在作业中使用截断符(cuts),但是对于一些问题,我似乎无法避免使用它们。我只是好奇为什么截断符被认为是一种罪过(讲师的话)?我知道这有点像取巧,但我已经使用了它们,知道它们如何影响我的程序。

9得票2回答
在Prolog中处理列表时,“-”符号代表什么意思?

我在阅读这个问题的答案。 p(X) :- read(A), q(A,X-[]). q(end,X-X) :- !. q(A,[A|X]-Y) :- read(B), q(B,X-Y). 上面的代码使用了语法List-List。我有点理解正在发生什么,但我想知道"-"符号/谓词在...

9得票4回答
如果存在 '!' 切割符,执行的区别是什么?

counter([],[]). counter([H|T],[[H,C1]|R]) :- counter(T,[[H,C]|R]),!, C1 is C+1. counter([H|T],[[H,1]|R]) :- counter(T,R). “!”的作用是什么?为什么在上面和下面的代码中...

8得票1回答
在追踪元解释器Prolog中实现剪枝

我有这个跟踪元解释器,改编自之前的问题Prolog unbind bound variable。 我不明白如何解释剪枝符号。感谢用户@false告诉我剪枝符号实现得很糟糕,我的问题是,我应该如何在这个元解释器中实现剪枝符号? %tracer mi_trace(Goal):- mi_...