2016-12-29 2 views
0

Je suis nouveau sur Scheme. J'essaye d'écrire un programme qui définit la multiplication (entière) comme addition répétée. En python le programme ressemblerait à quelque chose comme:Multiplication comme addition répétée?

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 

Il y a deux problèmes que j'ai en essayant d'écrire dans le schéma, un « dur » et un « soft »: problème

  1. Le « dur » : Je ne trouve pas un équivalent de la fonction de plage dans Scheme. Comment devrais-je l'implémenter?
  2. Le problème 'soft': A ce stade du livre, les boucles n'ont pas été introduites pour Scheme, ce qui me porte à croire que la solution ne contient pas de boucle for; cependant, je vais bien utiliser une boucle for si c'est plus facile/meilleur.

Répondre

0

Vous utilisez la récursivité à la place de l'itération. L'idée générale est:

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

Maintenant, pouvez-vous coder cela dans Scheme par vous-même?

0

Racket (un dérivé Scheme), il y a « let nommé » où l'on peut continuer à ajouter dans chaque boucle pour les temps b (plus facile à comprendre ce concept):

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