Some more Haskell exercises. Adding LICENSE
This commit is contained in:
		
							parent
							
								
									1c60de9818
								
							
						
					
					
						commit
						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 | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | Copyright (c) 2023 Joseph Ferano - joseph@ferano.io | ||||||
|  | 
 | ||||||
|  | Permission is hereby granted, free of charge, to any person obtaining | ||||||
|  | a copy of this software and associated documentation files (the | ||||||
|  | "Software"), to deal in the Software without restriction, including | ||||||
|  | without limitation the rights to use, copy, modify, merge, publish, | ||||||
|  | distribute, sublicense, and/or sell copies of the Software, and to | ||||||
|  | permit persons to whom the Software is furnished to do so, subject to | ||||||
|  | the following conditions: | ||||||
|  | 
 | ||||||
|  | The above copyright notice and this permission notice shall be | ||||||
|  | included in all copies or substantial portions of the Software. | ||||||
|  | 
 | ||||||
|  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||||
|  | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||||
|  | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||||
|  | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||||||
|  | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||||||
|  | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||||
|  | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user