0

再帰を使用して、作成した基本ブロック (y) を x 倍の高さでスタックしようとしています。

(define stack-copies-of
(lambda (x y)
  (cond
    ((= x 0) 0)
    ((> x 0) (stack y y)

私はそれ以上先に進みませんでした。ブロックのスタックを画面に表示したい。ありがとうございました!

4

2 に答える 2

0

まず、再帰を使用していません。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

'* の代わりに追加の引数を使用することを除いて、これらのいずれかに基づいている可能性があると思います。

于 2013-09-15T21:53:35.630 に答える