将不正确列表转换为方案中正确列表的正确方法?

Correct way to convert an improper list to a proper list in scheme?

是否有内置方法可以将不正确的列表/对/点对转换为方案中的正确列表?感觉一定有,就是找不到。相反,我一直在使用以下内容。

(define (make-proper improper-list)
  (if (proper-list? improper-list) improper-list
    (if (pair? improper-list)
      (cons (car improper-list) 
          (make-proper (cdr improper-list)))
      (cons improper-list '()))))

; (make-proper '(1 2 3 . 4))  ;=> (1 2 3 4)
; (make-proper (cons 1 2))    ;=> (1 2)

是否有内置方法可以做到这一点?如果没有,有没有比我更好的解决方案?

如果您的解释器尚未包含它,请使用 flatten. It's easy to implement

(flatten '(1 2 3 . 4))
=> (1 2 3 4)

(flatten (cons 1 2))
=> (1 2)