wavec022

functional programming

Oct 9th, 2020 (edited)
1,041
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Functional Programming
  2.  
  3. def incAll(list: List[Int]): List[Int] = {
  4.     if(list.isEmpty) List.empty[Int]
  5.     else list.head+1 :: incAll(list.tail)
  6. }
  7.  
  8. def incAllBy10(list: List[Int]): List[Int] = {
  9.     if(list.isEmpty) List.empty[Int]
  10.     else list.head+10 :: incAll(list.tail)
  11. }
  12.  
  13. // Or you can make a more adaptable version by adding a parameter
  14. def incAll(byNum:Int, list:List[Int]): List[Int] = {
  15.     if(list.isEmpty) List.empty[Int]
  16.     else list.head+byNum :: incAll(byNum, list.tail)
  17. }
  18. def incAllBy10(list) = incAll(10, list)
  19.  
  20. // In this one the operator is different too
  21. def doubleNums(list) =
  22.     if(list.isEmpty) List.empty[Int]
  23.     else list.head*2 :: doubleNums(list.tail)
  24.  
  25. // ok so let's do like an interpreter or some shit
  26. def map(f: Int -> Int, list: List[Int]): List[Int] = {
  27.     if(list.isEmpty) List.empty[Int]
  28.     else f(list.head) :: map(f, list.tail)
  29. }
  30. def incAll(list) = map(x -> x+1, list)
  31. def doubleNums(list) = map(x -> x*2, list)
  32. def absNums(list) = map(x -> x.abs, list)
  33. // this is called a lambda or anonymous function
  34. // x -> x+1 is a function that takes x and returns x+1
  35.  
  36. /*
  37. Functional Programming - taking functions seriously
  38. - Functions as first-class entities
  39.  
  40. - we can put an int into a variable
  41. - we can pass an int into a function
  42. - we can return an int from a function
  43. - we can store ints in data structures like list array etc
  44. */
  45.  
  46. // going back to the map() function
  47.  
  48. def capitalize(list: List[String]): List[String] = map(str -> str.toUpperCase(), list)
  49.  
  50. // we can add map[A] to account for type parameter
  51. def map[A](f: A -> A, list: List[A]): List[A] = {
  52.     if(list.isEmpty) List.empty[Int]
  53.     else f(list.head) :: map(f, list.tail)
  54. }
  55.  
  56. def convert(list: List[String]): List[Int] = map(str -> str.toInt, list)
  57.  
  58. // can also use
  59. _ + 1
  60. // instead of
  61. x -> x+1
  62.  
  63. // also this
  64. (x,y) -> y + x*2
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×