การคูณเป็นการบวกซ้ำ?

ฉันยังใหม่กับโครงการ ฉันกำลังพยายามเขียนโปรแกรมที่กำหนดการคูณ (จำนวนเต็ม) เป็นการบวกซ้ำ ใน 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

มีปัญหาสองประการที่ฉันพบเมื่อพยายามเขียนใน Scheme หนึ่งปัญหา 'ยาก' และอีกปัญหาหนึ่ง 'อ่อน':

  1. ปัญหา 'ยาก': ฉันไม่พบฟังก์ชัน range ที่เทียบเท่าใน Scheme ฉันควรดำเนินการนี้อย่างไร?
  2. ปัญหา 'อ่อน': ณ จุดนี้ในหนังสือ for loops ไม่ได้รับการแนะนำสำหรับ Scheme ซึ่งทำให้ฉันเชื่อว่าวิธีแก้ปัญหาไม่มี for loop; อย่างไรก็ตาม ฉันก็โอเคกับการใช้ for loop ถ้ามันง่ายกว่า/ดีกว่า

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) มี "ชื่อให้" โดยที่คุณสามารถเพิ่มในแต่ละวงต่อไปเป็นเวลา b ครั้ง (เข้าใจแนวคิดนี้ง่ายกว่า):

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