Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Working Examples

Building an array incrementally:

(defun build-array (n)
  (build-array-helper 0 n (array:new)))

(defun build-array-helper (i n acc)
  (if (>= i n)
      acc
      (build-array-helper
        (+ i 1)
        n
        (array:set i (* i i) acc))))
lfe> (array:to_list (build-array 10))
(0 1 4 9 16 25 36 49 64 81)

Finding elements by predicate:

(defun array-find (pred arr)
  (array-find-helper pred arr 0 (array:size arr)))

(defun array-find-helper (pred arr i size)
  (cond
    ((>= i size) 'not-found)
    ((funcall pred (array:get i arr)) i)
    ('true (array-find-helper pred arr (+ i 1) size))))
lfe> (let ((arr (array:from_list '(1 3 5 8 9 12))))
       (array-find (lambda (x) (== 0 (rem x 2))) arr))
3

Filtering an array:

(defun array-filter (pred arr)
  (array:sparse_foldr
    (lambda (i x acc)
      (if (funcall pred x)
          (cons x acc)
          acc))
    '()
    arr))
lfe> (let ((arr (array:from_list '(1 2 3 4 5 6 7 8 9 10))))
       (array-filter (lambda (x) (> x 5)) arr))
(6 7 8 9 10)