如何表示“左侧某处”?在序言中?
在Prolog中,如何表示“左侧某处”的情况。 例如,有一个List“List”和两个术语“X”和“Y”,如何表示规则:X在List中位于Y左侧的某处。
In the Prolog, how to represent the situation "somewhere to the left".
For example, there is a List "List" and two terms "X" and "Y", how to represent the rule: X is somewhere to the left of Y in the List.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这可以简化为子序列匹配的问题。
那么你的“left-of”查询将是
subsequence([X, Y], List), !
。This can be reduced to the problem of subsequence matching.
Then your "left-of" query would be
subsequence([X, Y], List), !
.您想要描述列表的一些属性。语法通常是解决这个问题的最佳方法。
You want to describe some properties of lists. Grammars are often the best way to address this.
它可以通过多种方式完成。
nth1(N,List,X) 是一个谓词,如果 List 的第 N 个元素是 X,则该谓词为 true。
使用 nth1 的实现非常简单;在你看到我的代码之前尝试解决它。
解决这个问题的其他方法是使用append/3:
或者只是简单的递归:
it can be done in many ways.
nth1(N,List,X) is a predicate that is true if the Nth element of the List is X.
The implementation using nth1 is pretty easy; try to solve it before you see my code.
Other ways to solve it is with append/3:
or just plain recursion:
如果你已经有了append/3谓词那么你可以使用:
如果你问:
-Leo
If you already have the append/3 predicate then you can use:
If you ask:
-Leo