나는 공통 리스프를 처음 사용한다. 나는 시행 단위 알고리즘을 구현하는 다음 술어 함수를 작성했습니다. 이 글을 쓰는 방법이 더 짧고 칙칙한가? 모든 도움이나 제안을 부탁드립니다.primep in common lisp
(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))
'LOOP'는 조건이 참 결코 없다는 것을 확인하기위한'NEVER' 절 있습니다. 예 : '(loop ... never (zerop (mod n i)))' – jkiiski
와우! 대단히 감사합니다. – amirteymuri
@jkiiski '루프'에 대해 배울 좋은 자료를 알고 있습니까? – amirteymuri