2014-09-25 2 views
-2

имя функции = mycountКак я могу рассчитывать все природные элементы в списке (с помощью mzscheme)

здесь выводится пример:

(mycount 20) -> error(must standard error) 
(mycount `()) -> 0 
(mycount `(1 2 3)) - > 6 
(mycount `((1 2) ((3)) (4 (5)))) -> 15 
+1

'(apply + (flatten lst))' – uselpa

+0

Ну, я просто удалю свой ответ. –

+0

Я всегда забываю о мощных BIF's FP, и мой ответ слишком многословный, я полагаю :) –

ответ

-1
function count-numbers takes a list: 
    define a counter 
    is it a number? 
     ERROR 
    is it a list? 
     for each element of list: 
      cond 
       - is it a number? -> increase the counter 
       - is it a list? -> apply (count-numbers) to it and add the result to counter 
       - do nothing 

Что-то подобное? Мы не собираемся делать домашнее задание :)

+0

Не идиоматическая схема (т. Е. Не работает) – Sylwester

+0

Не могли бы вы подробно рассказать? Или это определение счетчика? (т. е. назначение в функции) –

+1

Вы мутируете 'counter'. Классическим решением для вашего собственного решения будет: (пусть цикл ((lst lst) (count 0)) (если (null? Lst) count (loop (cdr lst) (if (natural? (Car lst)) (+ 1 count) count)))) ', который обновляет счетчик рекурсией. – Sylwester

Смежные вопросы