prolog - 根据一些规范在 Prolog 中创建一个列表
问题描述
我正在做一个附带项目,我正在尝试创建一个 Prolog 函数来制作原子列表,但它必须确保一些原子排在其他原子之前。本质上是必须完成的任务列表,但其中一些任务是其他任务的先决条件。
例如:
task(brushteeth).
task(usemouthwash).
task(gotowork).
prereq(usemouthwash, brushteeth).
%where brush teeth must be done prior to using mouthwash
然而,我什至一开始就创建了一个可以列出所有任务的列表,更不用说先决条件先于其他任务了。
任何指导都会很棒,我当然不会要求任何人为我写这个我只需要一个通用的工作示例或其他东西来让我开始。我搜索了一个试图修改这么多东西的尝试,我只是无法再让任何东西工作了。
预先感谢您,如果这个问题看起来含糊不清或无益,我深表歉意。我真的被困住了。
解决方案
您可以从基本案例开始思考,因为您更有可能使用递归编写谓词:
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]
推荐阅读
- android - 将gridview拉到最上面的项目时如何删除高亮效果
- angularjs - 状态有效时显示 2 张图像
- sql-server - 在另一个数据库中迁移到具有外部依赖项的 Azure Sql 数据库
- biztalk - 在 BizTalk 中存储键值对的最佳方式
- artifactory - 针对本地 Artifactory 的依赖解决需要很长时间
- css - 如何使它看起来像一个带有 CSS 的表格?
- javascript - 将脚本标记作为字符串加载并将其附加到 html 标头
- java - java.lang.ClassNotFoundException:找不到类“com.google.firebase.iid.internal.FirebaseInstanceIdInternal”
- java - java流找到匹配还是最后一个?
- python - pandasql OperationalError:SQL 变量太多