函式式程式設計初探(functional programming)
以下**為乙個簡單的表示幾何區域的簡單洗頭工。
function disk (cx, cy, r)
return function (x, y)
return (x - cx) ^2 + (y - cy) ^2 <= r^2
endendfunction rest (left, right, bottom, up)
return function (x, y)
return left <= x and x <= right and
bottom <= y and y <= up
endendfunction complement (r)
return function (x, y)
return not r(x,y)
endendfunction union (r1, r2)
return function (x, y)
return r1 (x,y) or r2(x,y)
endendfunction intersection (r1, r2)
return function (x, y)
return r1 (x,y) and r2(x,y)
endendfunction difference (r1, r2)
return function (x, y)
return r1(x,y) and not r2(x,y)
endend
可以看到的是函式式程式設計的**十分簡潔,我們可以很方便的定義圓盤,長方形,並可以對他們進行交集並集差集的運算。 Lua程式設計(八十二)
除了上述在c語言和棧之間交換資料的函式外,c api還提供了下列用於通用棧操作的函式 int lua gettop lua state l void lua settop lua state l,int index void lua pushvalue lua state l,int index v...
Lua程式設計(八十二)
lua中所有的結構都是動態的 他們會按需擴充套件,並且在可能時最後重新收縮。這意味著lua中記憶體分配失敗可能無處不在,幾乎所有的操作最終都可能面臨記憶體分配失敗。此外,許多操作也可能丟擲異常。lua語言使用以異常來提示錯誤,而沒有在api的每個操作使用錯誤碼。lua使用了c語言中的setjmp機制...
Lua程式設計(四十二)
lua語言還提供了一種改變表在兩種正常情況下的行為的方式,即訪問和修改表中不能存在的字段。index 元方法 當訪問乙個表中不存在的字段時會得到nil。實際上,這些訪問會引發直譯器查詢乙個名為 index的元方法。如果沒有這個元方法,那麼像一般情況下一樣,結果就是nil 否則,則由這個元方法來提供最...