0

我正在尝试使用递归来堆叠我创建的基本块(y),x 次高。

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

我没有走得更远,因为好吧……我很难过。我希望一堆块出现在屏幕上。谢谢!

4

2 回答 2

0

如果您的数据结构是一个堆栈,您可以定义它以及相关的操作 push、pop 和 one 以显示堆栈。

(define stack '())

(define (push e)
  (set! stack (cons e stack)))

(define (pop)
  (let ((e (car stack)))
    (set! stack (cdr stack))
    e))

(define (display-stack)
  (for-each
   (lambda (e) (display e) (newline))
   stack))

以下是堆叠n次元素的递归函数

(define (stack-ntimes n e)
    (when (> n 0)
      (push e)
      (stack-ntimes (- n 1) e)))
于 2013-09-16T13:45:20.037 回答
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 回答