Во втором случае cond нет причин запускать adder
на (car lst)
. Простое добавление (car list)
к рекурсивному шагу должно работать.
Для последней строки не проверяйте (char? (car lst))
. Просто сделайте последнюю строку предложением else
, означая, что все, НО число будет идти в строку else.
Причина, по которой вы становитесь недействительной, заключается в том, что ваш ввод не удовлетворяет любому из cond
условий, а у вас нет else
, поэтому ответ - ничто (т.е. ).
Последняя ошибка во вводимых вами данных. '(asd12sdf)
это буквально список с одним символом с именем "asd12sdf". Я думаю, что вы хотите дать ему '(a s d 1 2 s d f)
(список из 6 символов и 2 цифр), что должно привести к 3. Обратите внимание, что между символом 'a
и символом #\a
.
есть очень важное различие.
Похоже, у вас не работает логика, поэтому ваша проблема не в функциональных языках, а только в синтаксисе Схемы.
Редактировать: и в последней строке у вас есть ((adder(cdr lst)))
, который обернут вокруг него слишком много паренов. Это заставит Схему попытаться оценить результат сумматора (который является числом) как процедуру (ошибка!).