Recursion 球拍将数字从基数10转换为基数4的简单程序

Recursion 球拍将数字从基数10转换为基数4的简单程序,recursion,numbers,racket,procedure,Recursion,Numbers,Racket,Procedure,我的球拍有些问题。作业要求我编写一个程序,将任何数字从10进制转换为4进制,解决方案应写在列表中。例如(转换为基数4 12)->(列表3 0) 现在我已经编写了一个过程,但它将每个数字插入到一个单独的列表中。 这是我的密码 (define (convert-to-base-four number) (cond [(<= number 3) (cons number empty)] [(> number 3) (reverse (list (remainder

我的球拍有些问题。作业要求我编写一个程序,将任何数字从10进制转换为4进制,解决方案应写在列表中。例如(转换为基数4 12)->(列表3 0) 现在我已经编写了一个过程,但它将每个数字插入到一个单独的列表中。 这是我的密码

(define (convert-to-base-four number)
  (cond
    [(<= number 3) (cons number empty)] 
    [(> number 3)  (reverse (list (remainder number 4)
                    (convert-to-base-four (floor (/ number 4)))))]))
(定义(转换为四进制数字)
(续)
[(3号)(反面)(列表(其余4号)
(转换为底数四(楼层(/编号4‘‘‘‘‘))]))
有人知道该怎么做吗?
非常感谢

尝试在列表中使用append:)


享受家庭作业的乐趣;)

AlexKnauth的评论是您需要遵循的–您必须为您的函数定义并遵守严格的(输入)和(输出)

;; from your code
(list Y
      (convert-to-base-four X))
这里的
Y
X
是什么并不重要:如果
convert to base four
返回某个值的列表,并递归调用
convert to base four
——返回一个列表——您将得到一个列表列表

另一种解决方案指出,使用
append
——但是


当您应该使用
cons
时,您正在使用
list
。此外,由于在不同的递归步骤上有多个
reverse
调用,数字将以错误的顺序混在一起。问题是,如果我将list和reverse组合在一起,它会出错。这是一个妄想症问题吗?不,这不是帕伦问题。你的树很好。这主要是一个
列表
缺点
问题。一旦解决了这个问题,你就必须弄清楚它是否应该这样使用反向。换句话说,当我使用“list”时,我不需要反向,但数字是单独放在列表中的,例如(list(list 3)0)好的,我使用了append,它起了作用。非常感谢你的努力,我的朋友。这不是答案!请在投稿前阅读:非常感谢您的回答。我明白你的意思。再次感谢
(define (base4 n)
  (if (< n 4)
      (list n)
      (append (base4 (floor (/ n 4)))
              (list (remainder n 4)))))

(displayln (base4 12))     ; (3 0)
(displayln (base4 13))     ; (3 1)
(displayln (base4 14))     ; (3 2)
(displayln (base4 15))     ; (3 3)
(displayln (base4 16))     ; (1 0 0)
(displayln (base4 123456)) ; (1 3 2 0 2 1 0 0 0)
(define (base4 n)
  (let loop ((m n) (acc empty))
    (if (< m 4)
        (cons m acc)
        (loop (floor (/ m 4))
              (cons (remainder m 4) acc)))))

(displayln (base4 12))     ; (3 0)
(displayln (base4 13))     ; (3 1)
(displayln (base4 14))     ; (3 2)
(displayln (base4 15))     ; (3 3)
(displayln (base4 16))     ; (1 0 0)
(displayln (base4 123456)) ; (1 3 2 0 2 1 0 0 0)