再帰を使用して、作成した基本ブロック (y) を x 倍の高さでスタックしようとしています。
(define stack-copies-of
(lambda (x y)
(cond
((= x 0) 0)
((> x 0) (stack y y)
私はそれ以上先に進みませんでした。ブロックのスタックを画面に表示したい。ありがとうございました!
まず、再帰を使用していません。stack-copies-of
ありませんstack
。基本的なリスト操作を確認する必要があります。リストを作成するものを次に示します。
;; easiest version, looks most like the one you started with
(define (make-list num-elements)
(if (zero? num-elements)
'() ; the tail of the list is the empty list
(cons '* (make-list (- num-elements 1)))))
;; tail recursive version using auxillary procedure
(define (make-list num-elements)
;; we define a local auxillary procedure to do the work
(define (make-list-aux num-elements acc)
(if (zero? n)
acc ; return the produced list
(make-list-aux (- n 1)
(cons '* acc))))
;; fire it off
(make-list-aux num-elements '()))
;; exactly the same as the previous, but with a named let
(define (make-list num-elements)
;; a named let can be called by name as a procedure, creating a loop
(let make-list-aux ((num-elements num-elements)
(acc '()))
(if (zero? n)
acc
(make-list-aux (- n 1)
(cons '* acc)))))
(display (make-list 10)) ; print the result
'* の代わりに追加の引数を使用することを除いて、これらのいずれかに基づいている可能性があると思います。