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))) 

wie herausgefiltert werden nicht-fach Divisoren? versucht:Wie man die Anzahl der richtigen Teiler zwischen einer Zahl und einer Liste von Zahlen zählt?

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

PS.1: fand eine ähnliche Frage: Language Scheme: find the sum of proper divisors , welche Version besser? einen Filter mit einem Prädikat- und Listengenerator oder der Lösung in der verknüpften Frage zusammensetzen?

+0

Verwenden '=' um zwei Zahlen zu vergleichen (nicht 'eq?' was nur für Fixnums funktioniert). – soegaard

Antwort

2

Das Problem scheint zu sein, dass Sie eine Reihe von Pars fehlen:

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

Der Ausdruck ohne die Pars:

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

ist die gleiche wie:

(lambda (x) x) 
+0

Gibt es ein Tool, das diese Art von Fehlern zeigt? Ist das ein statischer semantischer Fehlertyp? – X10D

Verwandte Themen