我有一个作业问题:如何在不使用let或loop(RACKET)的情况下重写此方法?

问题描述 投票:0回答:1

此方法完全可以正常工作,但是我不允许仅使用let,loop,set等进行递归。

 (define (convert k n)
  (let loop ((k k) (acc '()))
  (if (zero? (quotient k n))
    (cons (modulo k n) acc)
     (loop (quotient k n) (cons (modulo k n) acc)))))

;;For example:
 (convert 70 4) ;;-> Returns(list 1 0 1 2)

我当前的尝试无法正常工作:

(define (convert k n)
 (cond
[(<= k n) (cons (modulo k n) empty)] 
[(> k n) (append (list (modulo k n)) 
                (convert (floor (/ k n))n))]))


(convert 70 4) ;;-> Returns(list 2 1 0)
scheme racket
1个回答
0
投票
(define (convert k n [acc '()])
    (if (zero? (quotient k n))
        (cons (modulo k n) acc)
        (convert (quotient k n) n (cons (modulo k n) acc))))
© www.soinside.com 2019 - 2024. All rights reserved.