純粋関数型言語Concurent Cleanat TECH
純粋関数型言語Concurent Clean - 暇つぶし2ch97:デフォルトの名無しさん
04/03/20 05:24
>>96
そうですか…日本語の扱いは少し面倒ですね。

URLリンク(sky.zero.ad.jp)
淡々と解いてみる。そろそろ難しくなってきたかも。この先にはAVL木の実装とか面倒臭い問題があるなぁ…
// 1, 2, 4, 5
CountOccurences :: a [a] -> Int | == a
CountOccurences c xs = length [x \\ x<-xs | x==c]

MakeFrequenceTable :: [a] -> [(a, Int)] | Eq a
MakeFrequenceTable xs = [(x, 100*CountOccurences x xs / length xs) \\ x<-removeDup xs]

myflatten :: ([[a]] -> [a])
myflatten = foldr (++) []

Permutations :: [a] -> [[a]]
Permutations []= [[]]
Permutations [x:xs] = [zs \\ ys <- Permutations xs, zs <- interleave x ys]

interleave :: a [a] -> [[a]]
interleave x ys = [insertAt i x ys \\ i <- [0..length ys]]

// 3.
(==) :: (s,t) (s,t) -> bool | Eq s & Eq t
(==) (a,b) (c,d) = a == c && b == d
右辺には2つの(==)があるが、1つめは型s、2つめは型tに対して定義された(==)である。左辺で定義した(==)は、型(s,t)に対して適用される。
この式にある3つの(==)は、すべて属する型が異なっているため別々の関数である。したがって再帰的ではない。

(==) :: [s] [s] -> bool | Eq s
(==) [x:xs] [y:ys] = x==y && xs==ys // セクション3.1.2より抜粋
右辺には2つの(==)があり、1つめは型s、2つめは型[s]に対して定義された(==)である。左辺で定義した(==)は、型[s]に対して適用される。
左辺と右辺に同じ型に属する(==)がある。この2つの(==)は同じ関数である。したがって再帰的な定義である。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch