我正在尝试将列表添加到已创建的列表中。 program(Route, FinalRoute).
Route
变量是一个在程序执行期间多次更改的列表,但是,有一个阶段Route
需要附加到FinalRoute
。
这个过程可能会发生几次,但我不知道如何实现这一目标。
以下是相关的(重要/必需的)代码,它可以解释我现在正在做的事情:
path(_, _, Route, FinalRoute, []):-
%% code to add Route to FinalRoute
path(Source, Dest, Route, FinalRoute, Conditions):-
[Cond|Rest] = Conditions,
get_info(Source, Dest, Path, NewDest),
path(Dest, NewDest, [Path|Route], FinalRoute, Rest).
路径谓词不会被调用一次而是多次,因此简单的Route = FinalRoute
是不够的。
因此Route
可以是[1, 2, 3]
,然后FinalRoute
应为[[1, 2, 3]]
。
当Route
为[4, 5, 6]
时,FinalRoute
应为[[4, 5, 6], [1, 2, 3]]
等。
任何建议都表示赞赏。
答案 0 :(得分:1)
在(纯)Prolog中我们无法分配给变量。在任何时候,它都是免费或绑定。
然后我无法回答你的问题。解决方案取决于path / 5被调用的上下文。一些替代方案是:
编辑累加器很容易添加,但只有在没有回溯的情况下实际调用path
时才会有用,因此(例如,在“前进”模式下)。
path(_, _, Route, RoutesSoFar, [Route|RoutesSoFar], []).
path(Source, Dest, Route, SoFar, AllRoutes, Conditions):-
[Cond|Rest] = Conditions,
get_info(Source, Dest, Path, NewDest),
path(Dest, NewDest, [Path|Route], SoFar, AllRoutes, Rest).