Implementieren der Funktion "Akkumulieren" in Schema

Ich habe seit ein paar Wochen keine Lust mehr, eine Akkumulationsfunktion zu implementieren. Ich habe eine "Map" -Funktion implementiert, die eine Liste durchläuft und für jedes Element eine Funktion ausführt.

Ich benutze diese Funktion, um "Akkumulieren" zu implementieren

   (define accumulate
  (lambda (op base func ls)
    (if(null? ls)
       ls
   (cond (not (null? (cdr ls)) (op base (map func ls) (accumulate op base func (cdr ls))))
       (op base (map func ls) (op base (func(car ls))))
   )
     )))
    ;It gets to a point (the last element) after applying the map function to each element,
    ;where it is '(number) instead of an expected "number" (outside of () ). I cannot figure out
    ;how to circumvent this.

Ich bin nicht sicher, wie ich das hinbekomme. Was ist der richtige Weg, um dies zu tun?

Das beabsichtigte Ergebnis ist:

; accumulate: combines using OP the values of a list LS after mapping a function FUNC on it
;    (accumulate + 0 sqr '(1 2 3)) => 14
;    (accumulate * 1 sqr '(1 2 3)) => 36
;

Antworten auf die Frage(4)

Ihre Antwort auf die Frage