私はPLTスキームで再帰を回避するのに苦労しています。例えばSchemeで再帰が動作することを信頼する/仮定するためのヒントはありますか?
、あなたが「*」の数のとのBナンバー 『 - 』 'を出力する。このコード(未完)、持っている場合はSを:
私はこの部分ことを信頼することができますどのように(define (stars-and-stripes a b)
(local ((define repeat (lambda(w n) (cond [(= n 0) ""] [(> n 0) (string-append w (repeat w (− n 1)))]))))
(cond
[(= 0 a) (cons (repeat "-" b) empty)]
[(= 0 b) (cons (repeat "∗" a) empty)]
[ (and (> a 0) (> b 0)) ... (stars-and-stripes (− a 1) b) ... (stars-and-stripes a (− b 1))...])))
を正しく動作しますか?
(stars-and-stripes (− a 1) b) ... (stars-and-stripes a (− b 1))
これは私が困っていた概念的な概念です。
私はこのすべてに完全に同意し、帰納に行く前にもっと「原誘導性の」ステップを挿入します。帰納的なステップに進む前に、それが1と2と3のために働くことを自分自身に確信してください。確かに、完全誘導ステップに入る前に*確信を持っているべきです。誘導ステップは「証明」を完了させますが、実際の「信念」の部分を多く(IMHO)は助けません。 –
また、DrRacketのStepperでいくつかの再帰的プログラムを実行するのに役立ちます。 (そして、私はジョンがスレッドに参加したのでこれを言っているだけではありません;-)) http://www.youtube.com/watch?v=j3X07a-7YRM – soegaard
これは非常に有用な人でした - 私は再帰をもっと良く理解しています。ありがとう! (その大部分はとても魔法的です) – Aspen