2

ラケットに組み込まれている flatten 関数を使用せずに、リストを平坦化するにはどうすればよいでしょうか?

flatten のデフォルトの実装は

(define (flatten lst)
  (cond 
    ((null? list)
      empty)
    ((list? (car lst))
      (append (flatten (car lst)) (flatten (cdr lst))))
    (else
      (cons (car lst) (flatten (cdr lst))))))

しかし、フラット化機能が舞台裏でどのように機能しているのかわからないため、フラット化機能を使用しない方法が完全にはわかりません。このコードの実装以外に、これについての良い説明が見つかりませんでした。誰か説明してくれませんか

これは私の非常に悪い試みであり、これは近くになく、実行されないため、ほとんど無知です....

(define acc null)
(define (my-flatten lst)
  (cond
    [(null? lst) null]
    [(list? (car lst)) (help-flatten (car lst)) (append (cdr lst) acc)]
    [else (append (car lst) acc) (my-flatten (cdr lst))]))

(define (help-flatten subLst)
  (if (null? subLst)
      (set! acc null)
      (append (car subLst) acc))
  (help-flatten (cdr subLst)))
4

1 に答える 1