- なあ、再帰関数好きな人いる? [転載禁止]©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 リストの長さ
|