私の仕事は最初の原子を構造体に入れることです。そのため、私はflattenとfunc "first-atom-lst"を使っています。しかし、一つの大きな問題があります - 私はペアで構造を扱う必要があり、ペアを壊さないでください。これを処理するのを手伝ってもらえますか?スキーム - リスト内のペアを「平坦化」しない方法は?
(define (check-improper? lst)
(cond
((null? lst) #f)
((number? lst) #f)
((atom? lst) #f)
((list? lst) #f)
((pair? (cdr lst)) #t)
(#t #f)
))
(define (improper-to-proper lst)
(cond
((null? lst) '())
((not (pair? (cdr lst))) (cons lst '()))
(else (cons (car lst) (improper-to-proper (cdr lst))))
)
)
(define (first-atom-from-pair lst)
(cond ((check-improper? lst))
((null? lst) #f)
((atom? (car (flatten lst)))
(car (flatten lst)))
(else
(first-atom (cdr (flatten lst))))))
(define (first-atom lst)
(cond ((check-improper? lst))
((null? lst) #f)
((atom? lst) lst)
((pair? (cdr lst)) (first-atom-from-pair lst))
((pair? lst) #f)
((atom? (car (flatten (not pair? lst))))
(car (flatten (not pair? lst))))
(else
(first-atom (cdr (flatten lst))))))
入力の表示と予想される出力 – naomik
冗長ペアとは何ですか?例えば – Sylwester
- 入力:((2 0)2) 期待出力:2 入力:((1 0)(2 3)2) 出力:2 入力:((2 1)。 (2 3)1) outpit:2 – Artem