2016-07-30 2 views
-1
>>> test = lambda f: f(lambda x: x + 1)(0) 
>>> z = lambda f: lambda x: x 
>>> test(z) 
0 

>>> succ = lambda n: lambda f: lambda x: f(n(f)(x)) 
>>> _1 = succ(z) 
>>> test(_1) 
1 

>>> _2 = succ(_1) 
>>> test(_2) 
2 

>>> plus = lambda m: lambda n: lambda f: lambda x: m(f)(n(f)(x)) 
>>> _3 = plus(_1)(_2) 
>>> test(_3) 
3 

>>> mult = lambda m: lambda n: lambda f: lambda x: m(n(f))(x) 
>>> _6 = mult(_2)(_3) 
>>> test(_6) 
6 

>>> _5 = plus(_2)(_3) 
>>> _25 = mult(_5)(_5) 
>>> _4 = plus(_2)(_2) 
>>> _100 = mult(_25)(_4) 
>>> test(_100) 
100 
+3

あなたは意図的に何かを恐ろしいものにしようとしていますか? –

+0

あなたは分かりませんか? – Julien

+0

テスト=ラムダF:F(ラムダX:X + 1)(0) Z =ラムダF:ラムダX:X テスト(Z)お返事 – sivashankari

答えて

0

まず、あなたはもう必要かのように(余計な混乱を避けるために、同じ名前に隠さ(ローカル)変数を避けるために説明してください:)

>>> test = lambda f: f(lambda x: x + 1)(0) 
>>> z = lambda g: lambda y: y 
>>> test(z) 
0 
その値で変数を置き換えるステップによって

囲碁ステップ!:今

test(z) = z(lambda x: x + 1)(0) 

zは(gがの定義式には表示されません関係なく渡される引数は何恒等関数lambda y: yを返さない関数であります)。

test(z) = (lambda y: y)(0) = 0 
+0

おかげ。私は上記の問題の第2の部分を解決するためにあなたの方法を適用しました。しかし、succ(z)を適切な方法で置き換えることはできませんでした。それは最初の部分より複雑です。説明しますか? – sivashankari

+0

同じ手順を適用し、あなたが得るものを私に見せてください。 – Julien

+0

succ(z)= lambda y:y(lambda x:f(n(f)(x))(0)正しいですか?これを解く方法は? – sivashankari

関連する問題