Haskell/解決方案/控制結構
外觀
| 練習 |
|---|
使用 case 語句實現一個 fakeIf 函式,可以用來代替熟悉的 if 表示式。 |
fakeIf :: Bool -> a -> a -> a
fakeIf condition ifTrue ifFalse =
case condition of
True -> ifTrue
False -> ifFalse
| 練習 |
|---|
main =
do x <- getX
putStrLn x
getX =
do return "My Shangri-La"
return "beneath"
return "the summer moon"
return "I will"
return "return"
return "again"
|
1.
main = do
putStrLn "Hello, what is your name?"
name <- getLine
case name of
"Simon" -> greatlanguage
"John" -> greatlanguage
"Phil" -> greatlanguage
"Koen" -> putStrLn "I think debugging Haskell is fun."
_ -> putStrLn "Sorry, I don't know you."
where
greatlanguage = putStrLn "I think Haskell is a great programming language."
2. 執行 main 將列印 "again"。記住,一系列 IO 操作的值與序列中最後一個操作的值相同。getX 也可以寫成
getX =
do return "again"
甚至可以更短,寫成
getX = return "again"
因此,main 函式中的 x 值為 "again",然後將輸出到螢幕。
| 練習 |
|---|
|
1.
- 替換
f為map (\ x -> x * 2 + 3) xs - 替換
f為foldr (\ x y -> read x + y) 1 xs
2.
(4+)- 變成
(\ x -> 4 + x) - 型別為
Num a => a -> a
- 變成
(1 `elem`)- 變成
(\ x -> 1 `elem` x) - 也可以寫成
(\ x -> elem 1 x) - 型別為
Num a :: a -> Bool- 注意:完整型別為
(Foldable t, Eq a, Num a) => t a -> Bool,但還沒有講到這一點。
- 注意:完整型別為
- 變成
(`notElem` "abc")- 變成
(\ x -> x `notElem` "abc") - 也可以寫成
(\ x -> notElem x "abc") - 型別為
Char -> Bool
- 變成