2014-09-24 53 views
0

使用Martin Richards编写的按位运算分析the eight queens puzzle的解决方案,但我很难理解基本的MCPL函数语法,尽管咨询了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给出它们的初始值?

回答

0

发现了一份文件,进一步讨论上述及其他类似的算法后,我来找如果cols == all如果是这样,一个完整的解决方案已经发现,

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

基本检查(增加count)。
ld,colsrd被赋予参数值。
对我来说,仍然看起来很奇怪的是在使用参数之前执行的检查,所以我可能仍然会遗漏一些细节。