【发布时间】:2018-10-10 17:54:33
【问题描述】:
所以我尝试自己制作这个程序,但我真的坚持下去了。问题如下:
给定网络中的任务 T,到 T 的路径是任务列表 从没有先决条件的任务 X 开始,以 T 结束,以及 这样列表中的每个元素,除了 X,都有它的前身作为 先决条件。
如果任务 T 没有先决条件,那么给定的只有一条路径 按列表 [T]。
否则到 T 的路径可以通过计算所有 T 的先决条件的路径并使用元素扩展这些路径 T.
一个列表Ts中所有任务路径的列表可以通过启动计算 使用空列表并附加通向每个列表的路径 连续元素。
定义谓词路径和所有路径以分别计算路径 到单个任务和列表中给出的任务,例如
?- paths(f,Paths). Paths = [[b, c, f]] ?- paths(g,Paths). Paths = [[e, g], [b, c, f, g], [k,h,g]].先决条件是这样的:
prereqs(e,[]). prereqs(f,[c]). prereqs(g,[e,f,h]).
我尝试定义路径谓词,但我得到的不是一个列表,而是嵌套列表。
add(X, List, [X|List]).
path(T, [H|Hs]) :-
prereqs(T, []),
add(T, [], [H|Hs]).
path(T, [H|Hs]) :-
prereqs(T, [N|_]),
add(T,[] , Hs),
path(N, H).
我在询问时得到以下答案:
?- path(f, Path).
Path = [[[b], c], f] .
?- path(e, Path).
Path = [e] .
在这一点上,我不明白如何使它正确。
【问题讨论】:
标签: prolog