了解MCPL函数调用

时间:2014-09-24 11:57:53

标签: mcpl

使用the eight queens puzzle编写的按位运算分析Martin Richards的解决方案,尽管咨询the language manual,但我很难理解基本的MCPL函数语法。 以下是完整的计划:

GET "mcpl.h"

STATIC count, all

FUN try
: ?,  =all,  ? => count++
: ld, cols, rd => LET poss = ~(ld | cols | rd) & all
                  WHILE poss DO
                  { LET bit = poss & -poss
                    poss -:= bit
                    try( (ld|bit)<<1, cols|bit, (rd|bit)>>1 )
                  }

FUN start : =>
  all := 1
  FOR n = 1 TO 12 DO
  { count := 0
    try(0, 0, 0)
    writef("There are %5d solutions to %2d-queens problem\n", count, n)
    all := 2*all + 1
  }
  RETURN 0

我无法理解的是函数try的前两行,即问号?语法以及如何传递(和处理)参数。

手册读取

  

问号(?)可以用作具有未定义值的常量。

以及

  

模式用于函数定义。 [...] 问号(?)或空模式将匹配任何参数值。

此语法对参数的含义是什么?ldcolsrd如何给出它们的初始值?

1 个答案:

答案 0 :(得分:0)

在找到进一步讨论上述和其他类似算法的论文之后,我开始发现

: ?, =all,  ? => count++

基本上检查是否为cols == all,如果是,则找到完整的解决方案(增加count)。
ldcolsrd都有参数值 对我来说看起来很奇怪的是在使用参数之前执行检查,所以我可能仍然缺少一些细节。