星期一, 6月 13, 2011

[Note] A small difference between Haskell and Python in FP

我不得不說,寫關於數學的東西,Haskell 看起來真的漂亮的多。舉個例子來說說,我想要寫的 function 是

m = 8
rs_m = 0.9 
gramma = 6.27
d_st(a_st) = 1+m*a_st
d_dyn(a_dyn) = rs_m + (1-rs_m)*a_dyn
d(a_st, a_dyn) = d_st(a_st)/d_dyn(a_dyn)

用 Haskell 寫的話,其實跟上面很像 XD

d_st a_st = 1 + m*a_st
d_dyn a_dyn = rs_m + (1-rs_m)*a_dyn 
d a_st a_dyn = (d_st a_st)/(d_dyn a_dyn)

用 Python 寫的話,就會變成 ...

delta_st = lambda alpha_st: 1 + 8*alpha_st
delta_dyn = lambda alpha_dyn: rs_m + (1-rs_m)*alpha_dyn
delta = lambda alpha_st, alpha_dyn: delta_st(alpha_st)/ delta_dyn(alpha_dyn)

用 Python 最大的問題是 ... 看不太到參數,當然可以用 def delta(alpha_st, alpha_dyn): ... 寫,只是我好懶,其實也不是很大的差別(當然在其他的特性上會差很多),不過就基本的寫法來說,我還是比較喜歡 Haskell 的。這或許也有可能是某個程度寫 Python 寫到累了想換新口味 XD? 就很單純的想法嘍 XD。


---
單純記錄 XDXD。

[Note] Find the maximum of the function under the condition

I want to find the maximun value of x function when function value <=1

ghci result

Prelude> let x b = ((1+0.429*b) * 0.52)/(1+0.159*b)
Prelude>let y =  length(takeWhile (<=1) (map x (iterate (+0.01) 0)))
Prelude> (fromInteger (toInteger y))*0.01
7.5


---
Simple Note