# SCHEME Multiplikation mit einer Liste



## Mikrowelle (1. Januar 2011)

Hallo

Ich will einer funktion eine liste und eine zahl übergeben diese zahl soll dann mit jedem element aus der liste multipliziert werden, die ergebnisse sollen dannals eine liste wiedergegeben werden.

z.B. ( f '(1 2 3) 2 ) -->  '( 2 4 6)

kann mir jemand ein rekursives beispiel zeigen wie das umgesetzt wird?


----------



## timestamp (1. Januar 2011)

Dafür ist gar keine Rekursion notwendig:

```
//Pseudocode
Liste = (1, 2, 3, 4, 5);
Zahl = 3;
Funktionsname(Liste, Zahl){
  for( i = 0; i < AnzahlDerElementeInListe; i++ ){
    Liste[i] *= Zahl;
  }
  return Liste;
}
```


----------



## Matthias Reitinger (1. Januar 2011)

timestamp hat gesagt.:


> Dafür ist gar keine Rekursion notwendig:


Jetzt müsstest du nur noch erklären wie man in Scheme eine for-Schleife ohne Rekursion umsetzt.

@Mikrowelle: ohne Garantie für Korrektheit, da grade kein Scheme-Interpreter zur Hand:
[lisp](define (f lst n)
  (if (null? lst) '()
  (cons (* (car lst) n) (f (cdr lst) n))))[/lisp]

Grüße,
Matthias


----------



## Thomas Darimont (2. Januar 2011)

Hallo,

schau mal hier:
http://www.linux-magazin.de/Heft-Abo/Ausgaben/2001/01/Funktioneller-gehts-nicht

Als Spielerei hier noch eine Variante mit map:
[lisp]
(define (mul-by-factor factor a-list)
	(map (lambda  (* factor n)) a-list))
[/lisp]

Aufruf / Ausgabe:

```
> (mul-by-factor 3 '(1 2 3 4))
(3 6 9 12)
```

Gruß Tom


----------



## Mikrowelle (2. Januar 2011)

Danke Ihr habt mir sehr geholfen


----------

