59 lines
1.3 KiB
Plaintext
59 lines
1.3 KiB
Plaintext
;;; create sample associative array
|
|
(define aa (list->ff '(
|
|
(hello . 1)
|
|
(world . 2)
|
|
(! . 3))))
|
|
|
|
(print aa)
|
|
; ==> #((! . 3) (hello . 1) (world . 2))
|
|
|
|
;;; simplest iteration over all associative array (using ff-iter, lazy iterator)
|
|
(let loop ((kv (ff-iter aa)))
|
|
(cond
|
|
((null? kv) #true)
|
|
((pair? kv)
|
|
(print (car kv))
|
|
(loop (cdr kv)))
|
|
(else (loop (force kv)))))
|
|
; ==> (! . 3)
|
|
; ==> (hello . 1)
|
|
; ==> (world . 2)
|
|
|
|
;;; iteration with returning value (using ff-fold)
|
|
(print
|
|
"folding result: "
|
|
(ff-fold
|
|
(lambda (result key value)
|
|
(print "key: " key ", value: " value)
|
|
(+ result 1))
|
|
0
|
|
aa))
|
|
|
|
; ==> key: !, value: 3
|
|
; ==> key: hello, value: 1
|
|
; ==> key: world, value: 2
|
|
; ==> folding result: 3
|
|
|
|
;;; same but right fold (using ff-foldr)
|
|
(print
|
|
"rfolding result: "
|
|
(ff-foldr
|
|
(lambda (result key value)
|
|
(print "key: " key ", value: " value)
|
|
(+ result 1))
|
|
0
|
|
aa))
|
|
|
|
; ==> key: world, value: 2
|
|
; ==> key: hello, value: 1
|
|
; ==> key: !, value: 3
|
|
; ==> rfolding result: 3
|
|
|
|
;;; at least create new array from existing (let's multiply every value by value)
|
|
(define bb (ff-map aa
|
|
(lambda (key value)
|
|
(* value value))))
|
|
(print bb)
|
|
|
|
; ==> #((! . 9) (hello . 1) (world . 4))
|