[View]  [Attachments] [History] [Home] [Changes] [Search] [Help]

```-- 演習 2000-10-17 課題3

fill :: Int -> String -> String
fill num str
| length str >= num = str
| True = ' ' : fill (num - 1) str

fact :: Int -> Int
fact 0 = 1
fact n = n * fact(n - 1)

factArray = [ fact n | n <- [0 ..] ]

factTable :: Int -> String
factTable n = concat [factFill 2 20 n | n <- [0 .. n]]
where
factFill :: Int -> Int -> Int -> String
factFill n m x = (fill n (show x)) ++ (fill m (show(fact x))) ++ "\n"

-- 演習 2000-10-30

sumSquares m n
= sqM + sqN
where
sqM = m * m
sqN = n * n

addPairwise :: [Int] -> [Int] -> [Int]

-- \$\$ は最後に計算した結果を表す

isOdd n
| n <= 0    = False
| otherwise = isEven (n-1)

isEven n
| n < 0     = False
| n == 0    = True
| otherwise = isOdd (n-1)

-- 2000-10-30 課題1

maxOccursList :: [Int] -> (Int, Int)
maxOccursList x = (count (maximum x) x, maximum x)
where
count :: Int -> [Int] -> Int
count n [] = 0
count n (x:xs)  | n==x = (count n xs) + 1
| True = count n xs
-- 2000-10-30 課題2

unique :: [Int] -> [Int]
unique xs = [x | x <- xs, count x xs == 1]
where
count n [] = 0
count n (x:xs)  | n==x = (count n xs) + 1
| True = count n xs

--2000-10-31 課題1

sublist :: Eq a => [a] -> [a] -> Bool
sublist [] _ = True
sublist _ [] = False
sublist (x:xs) (y:ys)
| x == y = sublist xs ys
| True = sublist (x:xs) ys

subseq :: Eq a => [a] -> [a] -> Bool
subseq [] _ = True
subseq (x:xs) (y:ys)
| x == y = _subseq xs ys
| True = _subseq (x:xs) ys
where
_subseq [] _ = True
_subseq (x:xs) (y:ys)
| x == y = _subseq xs ys
| True = False
--2000-11-17 演習

--1. 整数のリストを引数とする，次の関数を定義せよ（mapまたはfilterを使うこと）．
--a) 各要素の二乗のリストを返す関数．
doubleList :: [Int] -> [Int]
doubleList xs = map (2 *) xs

--b) 全ての要素が0より大きい場合にTrueを，そうでない場合にFalseを返す関数．

```