То, что вы называете «самым левым дочерним элементом первого узла», равно (cadr tree)
.
В вашей функции есть один (cadr tree)
, и это говорит о том, что первое условие всегда выполняется.
И это это то, что происходит. Форма
cond
имеет вид
(cond clause-1 clause-2 ...)
Каждый пункт в свою очередь имеет форму (condition value)
.
То есть
(cond (condition-1 value-1)
(condition-2 value-2)
(condition-3 value-3)
...)
Если вы сопоставите это с вашей функцией, вы увидите, что
null?
равно condition-1
и (cadr tree)
равно value-1
, car
равно condition-2
и tree
равно value-2
, far-left
равно condition-3
и (cdr tree)
равно value-3
.
С null?
не #f
, всегда выбирается первое предложение.
Правильная форма:
(define (far-left tree)
(cond
((null? (cadr tree)) (car tree))
(else (far-left (cdr tree)))
Однако этот код по-прежнему не работает.
Исправление ошибок, оставленных как осуществление.