我目前有以下问题,我想用 Prolog 解决。这是一个简单的例子,很容易用 Java/C/whatever 解决。我的问题是,我认为太依赖于 Java 的思想,无法以利用 Prolog 逻辑能力的方式来实际制定问题。
问题是..
我有一组 6 个箭头,指向左或右。假设它们处于以下起始配置中:
->
<-
->
<-
->
<-
现在,我可以切换两个箭头,只要它们彼此相邻。我的目标是发现哪些动作序列将使箭头的初始配置变成
<-
<-
<-
->
->
->
我最初尝试提出问题是..
right(arrow_a).
left(arrow_b).
right(arrow_c).
left(arrow_d).
right(arrow_e).
left(arrow_f).
atPosition(1, arrow_a).
atPosition(2, arrow_b).
atPosition(3, arrow_c).
atPosition(4, arrow_d).
atPosition(5, arrow_e).
atPosition(6, arrow_f).
这将告诉 Prolog 箭头的初始配置是什么。但是现在我如何在其中插入额外的逻辑呢?例如,如何实施switchArrows(Index)
?在 Prolog 中说明这样的初始条件是否正确?arrow_a
例如,当我尝试设置在位置 6 时,它不会干扰atPosition(6, arrow_a)
吗?