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
- each: :b | b call
- {1 2 3} {out} each
Ruby
- def each(array, block)
- array.each{|e| block.call(e) }
- end
- block = Proc.new{|e| puts e }
- 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 2 3 4} | 1 +2
- -> {2 3 4 5}
Ruby
- [1,2,3,4].map{|n| n+1 }
- -> [2 3 4 5]
Colon – filter
- {} {1 2 3 4 5 6 7 8 9 10} | dup 2 % 0 = ? drop +
- -> {2 4 6 8 10}
Ruby
- [1,2,3,4,5,6,7,8,9,10].select{|n| n % 2 == 0 }
- -> [2,4,6,8,10]
Colon – reduce
- 0 {1 2 3 4 5} | +
- -> 15
Ruby
- [1,2,3,4,5].inject(0){|sum,n| sum + n }
- -> 15
Diverse andre
Ruby har flere slike funksjoner så her noen Colon eksempel på flere av dem.
Colon – find
- {1 2 3 4} | 2 > ? ;; : drop nil
- -> 3
- {1 2 3 4} | 78 = ? ;; : drop nil
- -> nil
Ruby
- [1,2,3,4].find{|n| n > 2 }
- -> 3
- [1,2,3,4].find{|n| n == 78 }
- -> nil
Colon – all
- true {1 2 3 4 5} | 10 > ? drop not ;;
- -> true
- true {1 2 3 4 5} | 4 > ? drop not ;;
- -> false
Ruby
- [1,2,3,4,5].all?{|n| n < 10 }
- -> true
- [1,2,3,4,5].all?{|n| n < 4 }
- -> false
Colon – include
- false {1 2 3 4 5} | 3 = ? drop not ;;
- -> true
- false {1 2 3 4 5} | 10 = ? drop not ;;
- -> false
Ruby
- [1,2,3,4,5].include?(3)
- -> true
- [1,2,3,4,5].include?(10)
- -> false
Colon – reject
- {} 1 10 to | dup 3 % 0 = ? : drop +
- -> {1 2 4 5 7 8 10}
Ruby
- (1..10).reject {|i| i % 3 == 0}
- -> [1, 2, 4, 5, 7, 8, 10]
Relevante innlegg/sider/lenker
| Innlegg: Sider: | På forsiden: |




0 tilbaketråkk: