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

时间:2015-11-29 14:52:11

标签: 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)

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

1 个答案:

答案 0 :(得分:1)

使用flatten。如果您的口译员已经不包括它,那么implement很容易。

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

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