2016-11-04 5 views
1
(define (proper-divisor? n m) 
    (eq? (modulo n m) 0)) 

(define (1..10) 
    list (iota 10 1)) 

(define (amount-of-proper-divisors n numbers) 
    (length (filter (lambda (x) proper-divisor? n x) numbers))) 

Как отфильтровать несоответствующие делители? пробовал:Как подсчитать количество правильных делителей между числом и списком чисел?

(filter (lambda (x) proper-divisor? n x) numbers)) 

PS.1: нашел подобный вопрос: Language Scheme: find the sum of proper divisors , какая версия лучше? объединение фильтра с генератором предикатов и списков или решением в связанном вопросе?

+0

использования '=' для сравнения двух чисел (не 'eq?', который работает только для fixnums). – soegaard

ответ

2

Проблема, кажется, что вам не хватает набор скобок:

(filter (lambda (x) (proper-divisor? n x)) numbers) 
        ^    ^
        here   and here 

Выражение без скобок:

(lambda (x) proper-divisor? n x) 

так же, как:

(lambda (x) x) 
+0

есть ли какой-нибудь инструмент, который бы отображал этот тип ошибок? это статический семантический тип ошибки? – X10D

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