0

CLライブラリのマニュアル「シーケンスのマッピング」には、「これらのマッピング操作はすべて、cl-loopマクロの観点から便利に表現できます」と書かれていますが、cl-reduceをcl-loopの観点からどのように表現できるかわかりません

4

1 に答える 1

1

それがどれほど「都合よく」表現されているかはわかりませんが、私の見解は次のとおりです。

(defun loop-reduce (func sequence &rest initial-element)
  (loop with result =
        (or (car initial-element)
            (prog1 (car sequence)
              (setf sequence (cdr sequence))))
        for x in sequence do (setf result (funcall func result x))
        finally (return result)))

(loop-reduce '+ '(1 2 3 4 5))
;; 15

(loop-reduce '+ '(1 2 3 4 5) 10)
;; 25
于 2013-06-30T18:41:31.213 に答える