2017-10-04 7 views
0

Je suis nouveau au lisp commun. J'ai écrit la fonction de prédicat suivante implémentant l'algorithme trial-division. Y a-t-il encore une façon plus courte et plus lisible d'écrire ceci? Toute aide ou suggestion est appréciée.primep fonction dans le lisp commun

(defun primep (n) 
    "trial-division" 
    (case (find 0 (loop for i upfrom 2 upto (expt n 1/2) collect (mod n i))) 
    (0 nil) 
    (otherwise t))) 


(mapcar (lambda (n) (list n (primep n))) 
     (loop for i upto 100 collect i)) 


=> ((0 T) (1 T) (2 T) (3 T) (4 NIL) (5 T) (6 NIL) (7 T) (8 NIL) (9 NIL) (10 NIL) 
(11 T) (12 NIL) (13 T) (14 NIL) (15 NIL) (16 NIL) (17 T) (18 NIL) (19 T) 
(20 NIL) (21 NIL) (22 NIL) (23 T) (24 NIL) (25 NIL) (26 NIL) (27 NIL) (28 NIL) 
(29 T) (30 NIL) (31 T) (32 NIL) (33 NIL) (34 NIL) (35 NIL) (36 NIL) (37 T) 
(38 NIL) (39 NIL) (40 NIL) (41 T) (42 NIL) (43 T) (44 NIL) (45 NIL) (46 NIL) 
(47 T) (48 NIL) (49 NIL) (50 NIL) (51 NIL) (52 NIL) (53 T) (54 NIL) (55 NIL) 
(56 NIL) (57 NIL) (58 NIL) (59 T) (60 NIL) (61 T) (62 NIL) (63 NIL) (64 NIL) 
(65 NIL) (66 NIL) (67 T) (68 NIL) (69 NIL) (70 NIL) (71 T) (72 NIL) (73 T) 
(74 NIL) (75 NIL) (76 NIL) (77 NIL) (78 NIL) (79 T) (80 NIL) (81 NIL) (82 NIL) 
(83 T) (84 NIL) (85 NIL) (86 NIL) (87 NIL) (88 NIL) (89 T) (90 NIL) (91 NIL) 
(92 NIL) (93 NIL) (94 NIL) (95 NIL) (96 NIL) (97 T) (98 NIL) (99 NIL) 
(100 NIL)) 
+2

'LOOP' a' un NEVER' article pour vérifier qu'une condition est jamais vrai. par exemple. '(boucle ... jamais (zerop (mod n i)))' – jkiiski

+0

wow! très gentil merci – amirteymuri

+0

@jkiiski Connaissez-vous une bonne source pour en savoir plus sur 'loop'? – amirteymuri

Répondre