Проблема с (+ x 1)
выражением.Если вы хотите увеличить некоторую переменную в Scheme, вам нужно присвоить ей новое значение:
(set! x (+ x 1))
Недостаточно просто добавить некоторые значения, как вы это сделали.Он просто добавляет их, а затем игнорирует результат, потому что вы не указали, что с ним делать.
Вы также можете переопределить эту функцию, чтобы получить еще один необязательный аргумент и передать x
таким образом, избегая определения имутирует x
отдельно.Что-то вроде:
(define (count-primes t . x)
(cond ((= t 1) (car x))
((prime? t) (+ x 1) (count-primes (- t 1) (+ (car x) 1)))
(else (count-primes (- t 1) (car x)))))
Обратите внимание, что вы должны принять car
из x
, потому что x
на самом деле список всех необязательных аргументов, но мы используем только первый, поэтому - car
.