トップページ > プログラム > 2015年08月12日 > Pci5W2YJ

書き込み順位&時間帯一覧

4 位/136 ID中時間01234567891011121314151617181920212223Total
書き込み数0100000000000000000000067



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net

書き込みレス一覧

なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
36 :デフォルトの名無しさん[sage]:2015/08/12(水) 01:27:14.94 ID:Pci5W2YJ
まぁ再帰を直接書くよりかは汎用的な関数で書いた方がいいよ
>>= や map , foldで書けるならそっちで書くべし
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
76 :デフォルトの名無しさん[sage]:2015/08/12(水) 23:10:56.27 ID:Pci5W2YJ
>>72
リストは最も基本的な再帰構造だと思うんだけど
haskell
data [a] = [] | a : [a] deriving (Eq, Ord)

scala
sealed trait List[+A]
case class Cons[+A](head:A,tail:List[A]) extends List[A]
case object Nil extends List[Nothing]
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
78 :デフォルトの名無しさん[sage]:2015/08/12(水) 23:16:55.97 ID:Pci5W2YJ
length :: [a] -> Int
length [] = 0
length (x:xs) = 1 + (length xs)

ループより分かりやすくね?
まぁ  リストの長さなら
def length[A](list:List[A]):Int = list.foldLeft(0)((total,_)=>total + 1)
みたいにfold使った方がいいかもわからんが
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
82 :デフォルトの名無しさん[sage]:2015/08/12(水) 23:20:45.20 ID:Pci5W2YJ
同じ「単純な事」しかできないなら
高階関数使ったほうがよさげじゃね?
fmap, foldr, >>=, <*> なんかを使ったほうがいいと思う
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
84 :デフォルトの名無しさん[sage]:2015/08/12(水) 23:23:21.20 ID:Pci5W2YJ
>>78
foldのほうが分かりやすいけど
再帰のほうは
リストの長さは空だったら0 空じゃなかったらtailの長さに+1したものって宣言的に買い取るだけ
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
90 :デフォルトの名無しさん[sage]:2015/08/12(水) 23:27:05.85 ID:Pci5W2YJ
>>83
個人的には 
問題にあった適切な高階関数 > fold > 再帰 > 末尾再帰 >ループ
で読みやすさが変わるイメージ
なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
93 :デフォルトの名無しさん[sage]:2015/08/12(水) 23:30:43.36 ID:Pci5W2YJ
リストって再帰が一番やりやすいデータ構造だと思うんだけどなぁ
>>86
リストの長さ


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。