Prolog中的汉诺塔谜题

17 Mar 2025 | 阅读 2 分钟

我们可以使用汉诺塔谜题将圆盘移动到另一个柱子上。 移动方向是从左到右,使用中间柱。这个中间柱就像一个辅助的存放柱。

它包含三个柱子和不同大小的圆盘。在这个谜题中,一次只能移动一个圆盘。这些圆盘按升序排列,这意味着最小的圆盘放在最大的圆盘上。

下图包含 3 个圆盘。在 7 步内,可以解决此谜题。

Towers of Hanoi Puzzle

要解决这个谜题,可以使用如下的递归Prolog程序。此程序包含两个子句。

以'_'开头的变量或以'_'填充的变量被称为“不在乎”变量。在Prolog中,任何结构都可以自由地匹配这些变量。

当情况 N=3 由Prolog解决时,将显示以下步骤。

在程序中,单个圆盘的移动可以用第一个子句描述。解决方案将如何递归地获得由第二个子句声明。在第二个子句中,N=3,A=左,B=右,C=中心账户。

对这个声明性子句的理解是正确的。递归子句的声明性解释与过程式阅读密切相关。以下代码显示了过程式解释

N=2 的声明性阅读如下

在上面的代码中,最后两个蕴涵的主体被替换为头部。Prolog目标生成解决方案,你可以看到它。

在Prolog中,三个主要操作描述如下

  1. 目标头与目标匹配。
  2. 一个新的目标序列重复地成为规则的主体。直到
  3. 我们采取一些简单的行动,或满足某些条件。

下一主题列表 & 序列