Ich habe mich schon einige Wochen lang bemüht, eine Accumulate-Funktion zu implementieren. Ich habe eine "Map" -Funktion ordnungsgemäß implementiert, die über eine Liste iteriert und eine Funktion für jedes Element ausführt.Implementieren der "Accumulate" -Funktion im Schema
ich diese Funktion bin mit implementieren „Accumulate“
(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 fest, wie dieses Recht zu bekommen. Was ist der richtige Weg?
Das gewünschte 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
;
Ich denke, Ihre 'cond' Aussage ist nicht korrekt. '(cond ((nicht (null? (cdr ls))) (op base ...' – chepner
Was genau soll es die Ausgabe von "akkumulieren" sein? Bitte geben Sie eine Beispieleingabe mit der erwarteten Ausgabe –
Auch, warum tun Sie benötigen 'map'? Sind Sie sicher, dass Ihre Eingabe eine Liste von _lists_ ist? –