1 :
ローカルルール・名前欄変更議論中@自治スレ:
Part5
次おちたらねるわ
2 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:37:00.54 ID:oYEnBCtf0
def takansinaFunction
x = 0
-> do
puts x+=1
end
end
a = takansinaFunction
b = takansinaFunction
a.call
a.call
b.call
b.call
b.call
3 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:38:44.17 ID:dMVka9xM0
前スレで高階関数を尋ねた者です
例えば
関数と自然数をとって、その関数を自然数回適用する関数を返す関数
はどのように書けますか?
f(1を足す関数,5) => 5を足す関数
みたいなのです
素人ですみません
4 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:42:31.18 ID:oYEnBCtf0
def func f , n
n.times do
f.call
end
end
x = 0
func lambda { puts x+=1 } , 5
こうかな?
5 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:43:10.16 ID:jEA+kf5d0
保守スクリプト作らないの?
6 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:45:40.85 ID:oYEnBCtf0
保守ばかりで内容のないスレにしても仕方ないし
あと何日かvipに立て続けたら消える予定
7 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:46:43.13 ID:oYEnBCtf0
>>4 よく3の日本語よんだら全然ちがった
もう一回いってくる
8 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:48:19.76 ID:oYEnBCtf0
def func f , n
lambda do
n.times do
f.call n
end
end
end
x = 0
f = func lambda { |n| puts x+=n } , 5
f.call
こうかな
9 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:50:37.43 ID:dMVka9xM0
ありがとうございます
やっぱり手続き型言語って難しい
読みといてみます
10 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:56:06.68 ID:dMVka9xM0
思ってた動きと違う…
11 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:56:16.85 ID:oYEnBCtf0
ええええ
12 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:59:13.05 ID:9BJIwyxN0
Rubyだと関数自体はオブジェクトじゃなくて
procとかlambda使わないとオブジェクトにできないからそこらへんがややこしいのかも
13 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 21:59:59.03 ID:dMVka9xM0
すみません
環境の違いを認識できてませんでした
f(nをとってn+1を返す関数,5) => nをとってn+5を返す関数
みたいなのです
14 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:04:15.24 ID:dMVka9xM0
何度もすみません
15 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:04:31.52 ID:9BJIwyxN0
面白そうだからスレが落ちませんように
ほしゅ
17 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:10:12.90 ID:oYEnBCtf0
俺そんなむずかしい数学できないぽwww
とりあえず、ちょっと書き換えたかえたけど
> nをとってn+1を返す関数 func
っていうのはこう
func = -> n {
->{n + 1}
}
> f(nをとってn+1を返す関数,5)
っていうのは、呼び出し側はこう
f.call func , 5
>nをとってn+5を返す関数
っていうのがわからない
渡したfuncの扱いはどうしたらいいの
18 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:12:51.36 ID:oYEnBCtf0
全部つなげると今こうなってる
# nをとってn+1を返す関数 func
func = -> n {
->{n + 1}
}
f = -> func , n {
# nをとってn+5を返す
-> {
n + 5
}
# func をどう使う?
}
# f(nをとってn+1を返す関数,5)
a = f.call func , 5
puts a.call
19 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:16:49.08 ID:dMVka9xM0
直感的には
f(func,0) = nをとってnを返す関数
f(func,n) = nをとってfunc( f(func,n-1)(n))を返す関数
みたいなかんじですが
rubyで書けるかは分からないです
20 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:17:36.17 ID:dMVka9xM0
あ、nがかぶった
21 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:18:42.16 ID:dMVka9xM0
修正
f(func,5) = nをとってfunc( f(func,4)(n))を返す関数
みたいのです
22 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:24:32.03 ID:oYEnBCtf0
よくわかんけどかいてみる
もしかしたら再帰って事かなぁ
23 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:28:00.61 ID:9BJIwyxN0
たぶんでけた
24 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:29:36.01 ID:9BJIwyxN0
def foo (function,loops)
lambda { |n|
sum=n
loops.times {
sum=function.call(sum)
}
return sum
}
end
aaa=foo(lambda{|n| n+1},5)
p aaa.call(1) #=>6
p aaa.call(2) #=>7
無名関数で再帰が書けるならもっとスマートになると思う
25 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:34:34.54 ID:nRa/4cK8P
26 :
ローカルルール・名前欄変更議論中@自治スレ:2012/01/19(木) 22:35:32.71 ID:oYEnBCtf0
俺はもうわかんね
>>24 のであってるならもうそれで
27 :
ローカルルール・名前欄変更議論中@自治スレ:
>>24 ありがとうございます
再帰を使わずにこの関数を書けるってすごいですね
勉強になりました