我正在做一个副项目,尝试创建一个列出原子列表的Prolog函数,但是必须确保某些原子先于其他原子。本质上是必须完成的任务列表,但是某些任务是其他任务的先决条件。
例如:
task(brushteeth).
task(usemouthwash).
task(gotowork).
prereq(usemouthwash, brushteeth).
%where brush teeth must be done prior to using mouthwash
但是,我什至很难创建一个列表,该列表可以列出所有任务,更不用说先决条件要先于其他任务了。
任何指导都会很棒,我当然不会要求任何人为我写这篇文章,我只需要一个通用的工作示例或使我入门的东西。我搜索了一个试图修改太多东西的尝试,以至于我什么都无法工作了。
在此先感谢您,如果这个问题含糊或无益,我深表歉意。我真的被卡住了。
答案 0 :(得分:2)
您可以从基本情况开始思考,因为您更有可能使用递归来编写谓词:
create_list([]). %zero element list is accepted, same for one element below:
create_list([X]):- task(X).
create_list([X,Y|Rest]):- prereq(X,Y), create_list([Y|Rest]).
最后是固定长度的列表:
create_list_len(L,N):- length(L,N), create_list(L).
具有事实的示例:
task(brushteeth).
task(usemouthwash).
task(gotowork).
prereq(usemouthwash, brushteeth).
prereq(gotowork, usemouthwash).
create_list(L).
L = []
L = [brushteeth]
L = [usemouthwash]
L = [gotowork]
L = [usemouthwash, brushteeth]
L = [gotowork, usemouthwash]
L = [gotowork, usemouthwash, brushteeth]
false
create_list_len(L,3).
L = [gotowork, usemouthwash, brushteeth]