5.
halve xs = splitAt (div (length xs) 2) xs
msort [] = []
msort [x] = [x]
msort xs =
merge (msort ys) (msort zs)
where (ys, zs) = halve xs
6.
-- summation of elements of a list
1) sum :: [Int] -> Int
2) sum [] =
sum (x : xs) =
3) sum [] = 0
4) sum (x : xs) = x + sum xs
5) sum :: Num a => [a] - a
sum = foldr (+) 0
-- getting sublist from a list by certain number
1) take :: Int -> [a] -> [a]
2) take 0 [] =
take 0 (x : xs) =
take (n + 1) [] =
take (n + 1) (x : xs) =
3) take 0 [] = []
take 0 (x : xs) = []
take (n + 1) [] = []
take (n + 1) (x : xs) =
4) take (n + 1) (x : xs) = x : take n xs
5) take :: Int -> [a] -> [a]
take 0 _ = []
take (n + 1) [] = []
take (n + 1) (x : xs) = x : take n xs
-- getting last element from nonempty list
1) last :: [a] -> [a]
2) last (x : xs) =
3) last (x : xs) | null xs = x
4) last (x : xs) | null xs = x
| otherwise = last xs
5) last :: [a] -> [a]
last [x] = x
last (_ : xs) = last xs
halve :: [a] -> ([a], [a])
halve a = (take ((length a) `div` 2) a, drop ((length a) `div` 2) a)
safetail :: [a] -> [a]
safetail a = if null a then a else tail a
언어 자체는 정말 좋은 편이다.
난이도가 과대포장된 면이 있는데,
실제로 써 보면, 스칼라나 클로저에 비해서 규모도 작고 배우기도 쉽다.
수학형 전산과 학생에게는 입문용 cs101언어로 이것만큼 적합한 것도 없을 듯 하다.
전기전자형 전산과 학생에게는 물론 C가 낫겠지만...
댓글 0