我正在我的人工智能实验室学习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)
我无法理解,这两个片段在概念上有何不同?累加器到底有什么不同?有什么好处?
蓄能器听起来像中间变量.(如果我错了,请纠正我.)到目前为止,我已经在我的程序中使用过它们,所以它真的是一个很大的概念吗?
我正在尝试编写一个函数,仅使用基本列表构造(缺点,空,第一,休息)来创建列表的排列.我正在考虑在列表的其余部分的递归调用中到处插入列表的第一个值,但是我的基本情况遇到了一些问题.
我的代码:
(define (permutation lst)
(cond
[(empty? lst) (cons empty empty)]
[else (insert_everywhere (first lst) (permutation (rest lst)))]))
Run Code Online (Sandbox Code Playgroud)
(置换(列表1 2))给了我(列表1 2空2 1空).我可以做些什么来在不同的组合之间创建占位符(例如空)但是没有让程序将占位符解释为列表中的元素?
我的基础案例是对的吗?
谢谢!