某個號稱三歲以上就可以玩的桌遊,抽象之後的基本問題就是在一個區域中如何擺放三種形狀(朝向隨意)。
比如區域:
三種形狀(短折,長折,一字),各種朝向如下:
這是迄今為止用木蘭語言編寫的最複雜的實用程式碼,包括一個遞迴搜尋,長約 150 行,測試約 70 行。其中一個類如下:
細節和演算法有很大改進空間,歡迎指教。
期間根據需要復現了木蘭的如下功能:
type 點 {
func $點(橫, 縱) {
self.橫, self.縱 = 橫, 縱
}
operator == (另一點) {
return self.橫 == 另一點.橫 and self.縱 == 另一點.縱
}
}
type Person {
{
name = "小白"
}
func $__init__(name) {
self.name = name
}
}
func shout(id): Person {
return Person(id)
}
print(shout("Mulan1").name)
比如 a[1:3], a[1:]
集合(set)、斷言(assert)、all、str/int 等等
下面是幾個主要部分的程式碼行數統計,格式為:兩週前->本週。
執行測試.py
,檢驗所有木蘭測試程式碼片段:151 -> 154test語法樹.py
,確保生成的語法樹與原始版本一致:67
分析器/語法分析器.py
:916 -> 944分析器/語法樹.py
,功用/除錯輔助.py
,包括對 ast 庫的中文封裝:284 -> 234 + 56 = 290分析器/詞法分析器.py
:187 -> 190環境.py
,載入木蘭模組:89 -> 97中.py
,主程式:35 -> 36演示高亮.py
:100功用/反饋資訊.py
:45由於還有相當部分的木蘭語言功能尚未補全,而實踐證明編寫較複雜例項的開銷相對較大,於是打算首先儘快補完語言功能和測試用例。
現在個別語言功能上卡了殼(比如變長引數),主要是看不出如何使用。如果有興趣並且對 Python 比較熟悉,歡迎一道研究。
[admin
]