2016-12-29 2 views
0

Ich bin neu in Scheme. Ich versuche, ein Programm zu schreiben, das (ganzzahlige) Multiplikation als wiederholte Addition definiert. In Python würde das Programm in etwa so aussehen:Multiplikation als wiederholte Addition?

a = int(raw_input(['please enter a number to be multiplied'])) 
b = int(raw_input(['please enter a number to multiply by'])) 

y = a 
print y 
for i in range(b-1): 
    y+=a 
print y 

Es gibt zwei Probleme, die ich habe, wenn in Schema zu schreiben versuche, ein ‚harte‘ und ein ‚weicher‘:

  1. Das ‚harte‘ Problem : Ich kann ein Äquivalent der Bereichsfunktion in Scheme nicht finden. Wie soll ich das umsetzen?
  2. Das "weiche" Problem: An diesem Punkt im Buch wurden keine for-Schleifen für Scheme eingeführt, was zu der Annahme führt, dass die Lösung keine for-Schleife enthält; Mir geht es aber gut mit einer for-Schleife, wenn das einfacher/besser ist.

Antwort

0

Sie verwenden die Rekursion anstelle der Iteration. Die allgemeine Idee ist:

mult(a, b) 
    if b == 0, return 0 
    return a + mult(a, b-1) 

Jetzt können Sie das in Scheme auf eigene Faust?

0

In Racket (ein Derivat Scheme) gibt es "genannt let", wo man in jeder Schleife für b mal Zugabe halten kann (leichter, dieses Konzept zu verstehen):

(let loop ((n 0) 
      (s 0)) 
    (cond 
    ([= n b] s) 
    (else (loop (add1 n) (+ s a))))) 
Verwandte Themen