Compare commits
2 Commits
0f4b707397
...
c54a056489
Author | SHA1 | Date | |
---|---|---|---|
c54a056489 | |||
a226b35406 |
70
Haskell.org
70
Haskell.org
@ -80,11 +80,71 @@ myLength xs = foldl (\acc _ -> acc + 1) 0 xs
|
|||||||
myLength' [] = 0
|
myLength' [] = 0
|
||||||
myLength' [x] = 1
|
myLength' [x] = 1
|
||||||
myLength' (_:xs) = 1 + myLength xs
|
myLength' (_:xs) = 1 + myLength xs
|
||||||
|
|
||||||
myLength [1..5]
|
|
||||||
myLength' [1..5]
|
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+RESULTS:
|
*** #5 Reverse a list.
|
||||||
: 5
|
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
λ> myReverse "A man, a plan, a canal, panama!"
|
||||||
|
"!amanap ,lanac a ,nalp a ,nam A"
|
||||||
|
λ> myReverse [1,2,3,4]
|
||||||
|
[4,3,2,1]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
**** Solution
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
myReverse = go []
|
||||||
|
where go acc [] = acc
|
||||||
|
go acc (x:xs) = go (x:acc) xs
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
*** #6 Find out whether a list is a palindrome
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
λ> isPalindrome [1,2,3]
|
||||||
|
False
|
||||||
|
λ> isPalindrome "madamimadam"
|
||||||
|
True
|
||||||
|
λ> isPalindrome [1,2,4,8,16,8,4,2,1]
|
||||||
|
True
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
**** Solution
|
||||||
|
#+begin_src haskell
|
||||||
|
isPalindrome xs = xs == reverse xs
|
||||||
|
#+end_src
|
||||||
|
*** #7 Flatten a nested list structure.
|
||||||
|
Transform a list, possibly holding lists as elements into a `flat' list by replacing each list with its elements (recursively).
|
||||||
|
|
||||||
|
Example:
|
||||||
|
#+begin_src haskell
|
||||||
|
,* (my-flatten '(a (b (c d) e)))
|
||||||
|
(A B C D E)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
Example in Haskell:
|
||||||
|
|
||||||
|
We have to define a new data type, because lists in Haskell are homogeneous.
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
data NestedList a = Elem a | List [NestedList a]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src haskell
|
||||||
|
λ> flatten (Elem 5)
|
||||||
|
[5]
|
||||||
|
λ> flatten (List [Elem 1, List [Elem 2, List [Elem 3, Elem 4], Elem 5]])
|
||||||
|
[1,2,3,4,5]
|
||||||
|
λ> flatten (List [])
|
||||||
|
[]
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
**** Solution
|
||||||
|
#+begin_src haskell
|
||||||
|
flatten = reverse . go []
|
||||||
|
where go acc (List []) = acc
|
||||||
|
go acc (Elem x) = x:acc
|
||||||
|
go acc (List (x:xs)) = go (go acc x) (List xs)
|
||||||
|
#+end_src
|
||||||
|
@ -12,7 +12,7 @@ source code block.
|
|||||||
|
|
||||||
* Progress
|
* Progress
|
||||||
- [16/99] OCaml
|
- [16/99] OCaml
|
||||||
- [4/99] Haskell
|
- [7/99] Haskell
|
||||||
- [0/99] Lisp (Soon)
|
- [0/99] Lisp (Soon)
|
||||||
|
|
||||||
* References
|
* References
|
||||||
|
Loading…
x
Reference in New Issue
Block a user