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

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

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

У меня есть две проблемы при попытке написать в Scheme: одна «жесткая» и одна «мягкая»:

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

person skeletonsaurus    schedule 29.12.2016    source источник


Ответы (2)


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

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

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

person Prune    schedule 29.12.2016

В Racket (производном от Scheme) есть «с именем let», где можно продолжать добавлять в каждом цикле b раз (проще понять эту концепцию):

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