Board logo

標題: 聽說是某天很夯的 fibonacci number XD [列印本頁]

作者: caterpillar    時間: 2013-8-9 15:56     標題: 聽說是某天很夯的 fibonacci number XD

我看到 Python Taiwan 在 FB 上的社團:
https://www.facebook.com/groups/ ... /10152155561273438/

很有趣,有人說是 Functional python,不過我看到了 append … 用了 append 就不是純函數式了… 所以我順手寫了一個 …
  1. print((lambda n: (lambda f: [f(i, f) for i in range(0, n)]))(10)(lambda n, fib: n if(n == 0 or n == 1) else fib(n - 1, fib) + fib(n - 2, fib)))
複製程式碼

把 10 改成任何你要的數,就可以是求該數量的費式數…XD
作者: caterpillar    時間: 2013-8-9 16:11

好像是在解這個 Challenge?
https://p2pu.org/en/groups/pytho ... ramming-challenges/
作者: google104782608    時間: 2013-12-19 10:04

回復 1# caterpillar


不好意思,想請問一下有關你寫的code
print((lambda n: (lambda f: [f(i, f) for i in range(0, n)]))(10)(lambda n, fib: n if(n == 0 or n == 1) else fib(n - 1, fib) + fib(n - 2, fib)))
寫法上有一點不太懂

知道裡面有用到 list conprehension, (lambda f: [f(i, f) for i in range(0, n)])
在這之後接的 (10) 以及 (lambda n, fib: n if(n == 0 or n == 1) else fib(n - 1, fib) + fib(n - 2, fib)) 這樣的寫法
程式是怎麼去判斷的?

謝謝你的指教
作者: caterpillar    時間: 2013-12-19 11:49

其實這只是好玩才這樣寫的,要知道思路的出發點,建議你看這個:
https://www.byvoid.com/upload/fl/images/FP/FP.pdf

我用到的是其中第 16 頁開始之後的概念 …

就實作來說:以下建立一個 lambda,並傳入 10:
  1. (lambda n: (lambda f: [f(i, f) for i in range(0, n)]))(10)
複製程式碼
執行後會有個 lambda 傳回 … 也就是 …
  1. (lambda f: [f(i, f) for i in range(0, n)])
複製程式碼
這個 lambda 需要一個 lambda,將由 f 參考對吧!所以我傳入了 …
  1. (lambda n, fib: n if(n == 0 or n == 1) else fib(n - 1, fib) + fib(n - 2, fib))
複製程式碼
這只是純綷想要在一行寫完 … 想要好懂一些的話就這樣 …
  1. def fib_list_to(n):
  2.     return lambda f: [f(i, f) for i in range(0, n)]

  3. def fib_resc(n, fib):
  4.     return n if(n == 0 or n == 1) else fib(n - 1, fib) + fib(n - 2, fib)

  5. print(fib_list_to(10)(fib_resc))
複製程式碼

作者: codedata    時間: 2013-12-19 15:57

參考一下 The Y Combinator explained with JavaScript
http://kestas.kuliukas.com/YCombinatorExplained/
作者: caterpillar    時間: 2013-12-19 16:18

那就來寫個 Python 版的吧!... XD
  1. def y(f):
  2.     return (lambda r: f(lambda n: r(r)(n)))(lambda r: f(lambda n: r(r)(n)))
複製程式碼

作者: caterpillar    時間: 2013-12-24 10:20

把實現的過程記錄下了…
http://www.codedata.com.tw/python/y-combinator-with-python/
作者: caterpillar    時間: 2013-12-25 07:17

The Little JavaScripter by Douglas Crockford
http://www.crockford.com/javascript/little.html




歡迎光臨 CodeData 技術論譠 (http://www.codedata.com.tw/forum/) Powered by Discuz! 7.2