小松鼠嚇了一跳,有了魔法眼鏡後,這世界看起來完全不一樣了

顯示具有 golang 標籤的文章。 顯示所有文章
顯示具有 golang 標籤的文章。 顯示所有文章

2013年4月27日 星期六

用正常人的方式在 Go 裡面做大數運算

Go 裡面沒有 Operator Overloading 的功能,所以雖然內建 Big Integer,但長一點的計算會變得很醜,比方說你要算個 (5*2+3*6)%10 好了,樣子就會有點像是
a := big.NewInt(5)
a.Mul(a, big.NewInt(2))
b := big.NewInt(3)
b.Mul(a, big.NewInt(6))
a.Add(a, b)
a.Rem(a, big.NewInt(10))
更複雜一點的算式就更難懂了。其他像是矩陣、分數、向量、多項式或者任何自訂的計算 type,下場都一樣悲慘。
底下是利用內建的 parser,壤我們可以用正常人的語言在 Go 裡面計算。
雖然有人會說什麼失去了編譯時期靜態檢查的特性,但真要比除錯,寫個 E("(5*2+3*6)%10") 絕對比上面一串外星文出錯的機會比較小一點。
可以到 http://play.golang.org/p/Toqkc4XY2J玩玩看。

2013年4月25日 星期四

Go 1.1 達到類似 Python 的 map 及 list comprehension


Go 1.1 的 reflect 新增了 SliceOf, ChanOf,以及 MakeFunc。
SliceOf 及 ChanOf 可以達到類似於 Python 裡面的 list 及 iterator 的功能,MakeFunc 可以搭配 Call 使用,達到類似 decorator 的功能。
以下是簡單測試了一下 Python 的 map 及類似 list comprehension 的效果。