prolog - 将关系变为事实
问题描述
我想在prolog中问一个非常基本的问题。我有一个看起来像的列表列表[[a_1,a],[a_2,c],[a_3,e,f]]
。我想创建一个获取该列表并为每个子列表添加一个中缀的关系。例如,我想插入x
为中缀:x([[a_1,a]),x([a_2,c]),x([a_3,e,f]])
。目标是使这种关系成为事实。我试图使用findall
但没有任何成功。
例子:
turn([[a_1,a],[a_2,c],[a_3,e,f]]).
输出:
[x([a_1,a]),x([a_2,c]),x([a_3,e,f])].
如何实施?
解决方案
[x([a])]
本身并不是一个事实。这只是一个不同的 Prolog术语形式。事实是在数据库中断言的术语,不代表谓词,并且可以查询。听起来您不想转换为“事实”,但您只想转换为不同的术语形式。
在这种情况下很容易maplist
:
turn_item(X, x(X)).
turn(TermList, NewTermList) :-
maplist(turn_item, TermList, NewTermList).
然后:
| ?- turn([[a_1,a],[a_2,c],[a_3,e,f]], L).
L = [x([a_1,a]),x([a_2,c]),x([a_3,e,f])]
yes
推荐阅读
- javascript - 带有空格的Javascript嵌套对象键
- node.js - 如何使用 node.js 在没有 json Web 令牌 (JWT) 的情况下使页面无法访问?
- curve-fitting - Davinci Resolve 对曲线使用什么插值?
- c# - 如何统一循环内外的逻辑,不重复?
- ios - 天蓝色 devops 中的 xcodebuild
- c# - More efficient way of serialization and deserialization?
- mysql - MySql to SqLite Database Retrieval & Backups
- angular - Content of route does not change, when only queryParams are changed
- java - 如何获得除哨兵值外的数组的最小数量?
- vba - how to RESIZE the imported picture with factor scaling using VBA in powerpoint 2016?