相关疑难解决方法(0)

什么是尾部呼叫优化?

很简单,什么是尾部调用优化?更具体地说,任何人都可以显示一些可以应用的小代码片段,而不是在哪里,并解释为什么?

language-agnostic algorithm recursion tail-recursion tail-call-optimization

765
推荐指数
8
解决办法
15万
查看次数

`append`谓词是尾递归的吗?

Prolog中列表处理的典型代码示例是append:

append([], Ys, Ys).
append([X | Xs], Ys, [X | Zs]) :- append(Xs, Ys, Zs).
Run Code Online (Sandbox Code Playgroud)

我的问题是这个程序是否是尾递归的.我想不是我在函数式语言方面的经验.但是,我觉得判断Prolog程序更加困难.我们似乎必须考虑统一.

prolog logic-programming

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

Prolog累加器.它们真的是一个"不同"的概念吗?

我正在我的人工智能实验室学习Prolog,从源头学习Prolog Now!.

在第5章中,我们来了解累加器.作为示例,给出了这两个代码片段. 查找列表的长度

没有累加器:

len([],0).
len([_|T],N) :- len(T,X), N is X+1.
Run Code Online (Sandbox Code Playgroud)

与累加器:

accLen([_|T],A,L) :- Anew is A+1, accLen(T,Anew,L).
accLen([],A,A).
Run Code Online (Sandbox Code Playgroud)

我无法理解,这两个片段在概念上有何不同?累加器到底有什么不同?有什么好处?

蓄能器听起来像中间变量.(如果我错了,请纠正我.)到目前为止,我已经在我的程序中使用过它们,所以它真的是一个很大的概念吗?

recursion tail-recursion prolog accumulator

9
推荐指数
3
解决办法
3968
查看次数

反向/回文的递归Prolog谓词

  1. 我是否可以获得具有两个参数的递归Prolog谓词,称为reverse,它返回列表的反转:

    示例查询和预期结果:

    ?- reverse([a,b,c], L).
    L = [c,b,a].
    
  2. 两个参数的递归Prolog谓词,palindrome如果给定列表是回文,则返回true.

    具有预期结果的示例查询:

    ?- palindrome([a,b,c]).
    false.
    
    ?- palindrome([b,a,c,a,b]).
    true.
    

reverse list prolog palindrome dcg

8
推荐指数
2
解决办法
5461
查看次数

DCG扩展:坚定不移被忽视了吗?

假设我有以下DCG规则:

 factor(X) --> "(", expr(X), ")".
Run Code Online (Sandbox Code Playgroud)

通常这将被翻译为:

 factor(X, A, B) :-
    [40|C] = A, expr(X, C, D), [41|B] = D.
Run Code Online (Sandbox Code Playgroud)

是否允许Prolog系统将其翻译如下,
即将统一合并到头部和目标中?

 factor(X, [40|A], B) :-
    expr(X, A, [41|B]). 
Run Code Online (Sandbox Code Playgroud)

如果DCG扩展不会坚定,则不允许
将[41 | B]放在expr调用的第三个参数中.

但我想坚定不移,所以一切都应该没问题?

再见

PS:关于坚定性的非正式定义,请参阅:
Richard O'Keefe,2009:
"作为Prolog编程中"坚定"一词的发明者,
我应该赞成它.坚定性基本上
意味着你不能强迫谓词错误
填写输出参数错误的路径."
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

PSS:对于其他DCG翻译,请参阅最新的
DCG标准提案.附录包含DCG翻译器
源代码:
ISO/IEC DTR 13211-3:2006
明确条款语法规则
Klaus Daessler
2012年11月20日
N238 DIN草案2012-11-20

prolog dcg iso-prolog

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