position-if

Die Funktion position-if erwartet zwei Argumente, wenn sie aufgerufen wird. Das erste Argument ist ein Prädikat, das zweite eine Liste. Das Prädikat wird auf die Elemente der Liste angewendet, bis es einen Wert ungleich nil ergibt. Die Position des Elements wird zu Resultat des Funktionsaufrufs. Die Positionen werden vom Anfang der Liste gezählt, dort ist die Position Null.

Die Funktion ist mit cond, null?, first, rest und + definiert:

(setq position-if
  (letrec
    ((inner-position-if
      (lambda (p l i)
        (cond
          ((null? l) nil)
          ((p (first l)) i)
          (t (inner-position-if p (rest l) (+ 1 i)))))))
    (lambda (p l)
      (inner-position-if p l 0))))