2017-02-02 5 views
0

Wie bewerkstellige ich so etwas in diesem Schema? ein Beispiel EingangsSchema mit Karte auf Argumente mit unterschiedlicher Größe

(scalar-mult '(1 2) 2) 

mit dem Ausgang

'(2 4) 

wäre hier ist das, was ich bisher versucht:

(define (scalar-mult vec s) 
    (map (λ (vec s) (* s vec)) vec s)) 

Ich habe einen anderen ähnlichen Thread empfehlen concat gesehen und wiederholen, aber das scheint nicht auf Schema zu funktionieren

Antwort

0

l ist die Liste, m der Multiplikator und e ein Element der Liste.

Try this:

(define scalar-mult 
    (lambda (l m) 
    (map (lambda (e) 
      (* e m)) 
     l))) 

Die Funktion map zwei Argumente. Erstens eine Funktion, die auf jedes Element einer Liste angewendet wird, und zweitens eine Liste.

0

Was Sie versuchen, iterieren über die Listenelemente 2, was lächerlich ist. Wenn Sie 2 wollen nur als Variable zur Verfügung stehen erwähnen es nicht und es so passieren:

(define (scalar-mult vec s) 
    (map (λ (vec) (* s vec)) vec)) 

Um die Frage zu beantworten, wenn Listen unterschiedlicher Größe sind:

map im Standard-Schema erfordert dass die Listenargumente genau die gleiche Größe haben, aber Sie haben SRFI-1, das funktioniert, als ob die Listen alle die gleiche Anzahl von Elementen wie die kürzeste Liste haben.

#!r6rs 

(import (except (rnrs base) map for-each) 
     (srfi :1)) 

(map (lambda (n1 n2) (+ n1 n2)) 
    (circular-list 1 2) ; infinite list with 1, 2 repeating 
    '(2 3 4 5)) 
; ==> (3 5 5 7) 
Verwandte Themen