Умножение как повторное сложение?

Я новичок в Scheme. Я пытаюсь написать программу, которая определяет (целое) умножение как повторное сложение. В python программа будет выглядеть примерно так:

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

Есть две проблемы, которые я имею при попытке написать в схеме, один «жесткий» и один «мягкий»:

  1. «Трудная» проблема: я не могу найти эквивалент функции диапазона в схеме. Как это реализовать?
  2. «Мягкая» проблема: на данный момент в книге for loops не были введены для Scheme, что заставляет меня полагать, что решение не содержит цикла for; однако я согласен с использованием цикла for, если это проще/лучше.

2 ответа

  1. Вместо итерации используется рекурсия. Общая идея:

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

    Теперь вы можете кодировать это в схеме самостоятельно?

  2. В Racket (a Scheme derivative) есть «named let» , где можно продолжать добавлять в каждом цикле в течение b раз (легче понять это понятие):

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