2014-09-24 87 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被賦予參數值。
對我來說,仍然看起來很奇怪的是在使用參數之前執行的檢查,所以我可能仍然會遺漏一些細節。