Perkalian sebagai penjumlahan berulang?

Saya baru mengenal Skema. Saya mencoba menulis program yang mendefinisikan perkalian (bilangan bulat) sebagai penjumlahan berulang. Dengan python programnya akan terlihat seperti:

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

Ada dua masalah yang saya alami ketika mencoba menulis dalam Skema, satu 'keras' dan satu lagi 'lunak':

  1. Masalah 'sulit': Saya tidak dapat menemukan fungsi rentang yang setara di Skema. Bagaimana saya harus menerapkan ini?
  2. Masalah 'lunak': Pada titik ini dalam buku ini, perulangan for belum diperkenalkan untuk Skema, yang membuat saya percaya bahwa solusinya tidak mengandung perulangan for; Namun, saya baik-baik saja dengan menggunakan for loop jika itu lebih mudah/lebih baik.

person skeletonsaurus    schedule 29.12.2016    source sumber


Jawaban (2)


Anda menggunakan rekursi sebagai pengganti iterasi. Ide umumnya adalah:

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

Sekarang, bisakah Anda mengkodekannya sendiri di Skema?

person Prune    schedule 29.12.2016

Dalam Racket (turunan Skema) ada "bernama let" di mana seseorang dapat terus menambahkan di setiap loop sebanyak b kali (lebih mudah untuk memahami konsep ini):

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