Colon: Funksjonelle egenskaper

I funksjonelle språk kan du f.eks. gi funksjoner som parameter til en annen funksjon, en har navnløse funksjoner og en har ofte funksjoner som map/filter/reduce eller tilsvarende.

Har prøvd meg på noen eksempler med Ruby nå. Mest for å sjekke hvordan det ser ut i Colon samt sjekke at ting er mulige å gjøre slik det er nå eller om jeg mangler noe.

Colon – funksjon som parameter

  1. each: :b | b call
  2. {1 2 3} {out} each

Ruby

  1. def each(array, block)
  2. array.each{|e| block.call(e) }
  3. end
  4. block = Proc.new{|e| puts e }
  5. each([1,2,3], block)

map/reduce/filter

Det en kan legge merke til er at det ikke finnes noen egne ord/funksjoner for map/reduce/filter eller for den saks skyld de andre nedenfor da alt løses ved hjelp av ? : ;; og | Eneste nye fra forrige Colon innlegg er ;; som betyr at den dropper å gå gjennom flere elementer mao en slutter |

Colon – map

  1. {} {1 2 3 4} | 1 +2
  2. -> {2 3 4 5}

Ruby

  1. [1,2,3,4].map{|n| n+1 }
  2. -> [2 3 4 5]

Colon – filter

  1. {} {1 2 3 4 5 6 7 8 9 10} | dup 2 % 0 = ? drop +
  2. -> {2 4 6 8 10}

Ruby

  1. [1,2,3,4,5,6,7,8,9,10].select{|n| n % 2 == 0 }
  2. -> [2,4,6,8,10]

Colon – reduce

  1. 0 {1 2 3 4 5} | +
  2. -> 15

Ruby

  1. [1,2,3,4,5].inject(0){|sum,n| sum + n }
  2. -> 15

Diverse andre

Ruby har flere slike funksjoner så her noen Colon eksempel på flere av dem.

Colon – find

  1. {1 2 3 4} | 2 > ? ;; : drop nil
  2. -> 3
  3. {1 2 3 4} | 78 = ? ;; : drop nil
  4. -> nil

Ruby

  1. [1,2,3,4].find{|n| n > 2 }
  2. -> 3
  3. [1,2,3,4].find{|n| n == 78 }
  4. -> nil

Colon – all

  1. true {1 2 3 4 5} | 10 > ? drop not ;;
  2. -> true
  3. true {1 2 3 4 5} | 4 > ? drop not ;;
  4. -> false

Ruby

  1. [1,2,3,4,5].all?{|n| n < 10 }
  2. -> true
  3. [1,2,3,4,5].all?{|n| n < 4 }
  4. -> false

Colon – include

  1. false {1 2 3 4 5} | 3 = ? drop not ;;
  2. -> true
  3. false {1 2 3 4 5} | 10 = ? drop not ;;
  4. -> false

Ruby

  1. [1,2,3,4,5].include?(3)
  2. -> true
  3. [1,2,3,4,5].include?(10)
  4. -> false

Colon – reject

  1. {} 1 10 to | dup 3 % 0 = ? : drop +
  2. -> {1 2 4 5 7 8 10}

Ruby

  1. (1..10).reject {|i| i % 3 == 0}
  2. -> [1, 2, 4, 5, 7, 8, 10]

Tilbaketråkk url: klikk her!
Stikkord: colon
Fb

Relevante innlegg/sider/lenker

0 tilbaketråkk: