09 July, 2006

[Haskell] Exercise 5.8 - 5.11

LIst comprehension notation の練習
○ Exercise 5.8

doubleAll :: [Int] -> [Int]
doubleAll xs = [2*x | x <- xs]

Main> doubleAll [1,2,3]
[2,4,6]
Main> doubleAll []
[]


○ Exercise 5.9

import Char

toupper :: Char -> Char
toupper c
| ('a' <= c) && (c <= 'z') = chr ( ord c + ord 'A' - ord 'a')
| otherwise = c

isLetters :: Char -> Bool
isLetters c
| ('a' <= c) && (c <= 'z') = True
| ('A' <= c) && (c <= 'Z') = True
| otherwise = False

capitalize :: String -> String
capitalize s = [toupper c | c <- s]

capitalizeLetters :: String -> String
capitalizeLetters s = [toupper c | c <- s, isLetters c]

Main> capitalize "aabbCdE"
"AABBCDE"
Main> capitalize "aabbC--dE"
"AABBC--DE"
Main> capitalizeLetters "aabbC--dE"
"AABBCDE"
Main>

○ Exercise 5.10

divisors :: Int -> [Int]
divisors n = [x | x <- [1 .. n], n `mod` x == 0]

isPrime :: Int -> Bool
isPrime n = (length (divisors n)) == 2

Main> divisors 12
[1,2,3,4,6,12]
Main> divisors 7
[1,7]
Main> isPrime 12
False
Main> isPrime 7
True
Main>

○ Exercise 5.11

matches :: Int -> [Int] -> [Int]
matches x ys = [y | y<- ys, y == x]

elem :: Int -> [Int] -> Bool
elem x ys = (length (matches x ys)) /= 0

Main> matches 1 [1,2,1,3,1,4]
[1,1,1]
Main> elem 1 [1,2,1,3,1,4]
True
Main> matches 1 [2,3,4]
[]
Main> elem 1 [2,3,4]
False
Main>

1 comment:

Anonymous said...

Hey Would you post the solution for exercise 5.22,5.23 and 5.26 and from Chapter 7 as well.