나의 임무는 구조의 첫 번째 원자를 얻는 것이다. 그래서 나는 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) 2) 출력 2 입력 ((2 1) (2 3) 1) outpit : 2 – Artem