Lisp 中的质数检查
Prime number check in Lisp
谁能指出我的错误。我正在尝试检查一个数字是否是素数。
它在一定程度上有效,但我有一个语义错误。例如它告诉我 9 是质数,但同时又告诉我 4 和 6 不是质数,我很困惑。
(defvar *prime* nil)
(defun primeCheck (x y)
(if (and (>= x y) (not (= (mod x y) 0)))
(progn
(setf y (+ y 1))
(primeCheck x y)
(setf *prime* 'yes))
(setf *prime* 'no))
)
(primeCheck 9 2)
(if (equal *prime* 'yes) (print "Number is prime") (print "Number is not prime"))
我建议您下载一些 IDE(例如 LispWorks 个人版)或查找 Common Lisp 的在线 REPL 和 运行 您的代码。你的错误:
("prime number")
是格式错误的列表。将其替换为 (print "prime number")
primeCheck
调用一些(尚未)未定义的函数 modulus
(*prime-Check* nil)
是一个格式错误的列表。替换为 (setf *prime-Check* nil)
- 格式错误
cond
和 and
- 经过所有这些更正后,它不适用于 2、3、5 等
很多地方都不对。
如何使用原性测试,例如来自 SICP(计算机程序的结构和解释)?
;; from SICP (here in clojure)
;; http://www.sicpdistilled.com/section/1.2.6/
(defun smallest-divisor (n)
(find-divisor n 2))
(defun square (n)
(* n n))
(defun find-divisor (n test-divisor)
(cond ((> (square test-divisor) n) n)
((dividesp test-divisor n) test-divisor)
(t (find-divisor n (1+ test-divisor)))))
(defun dividesp (a b)
(zerop (mod b a)))
(defun primep (n)
(= n (smallest-divisor n)))
primep
测试主要性。
谁能指出我的错误。我正在尝试检查一个数字是否是素数。 它在一定程度上有效,但我有一个语义错误。例如它告诉我 9 是质数,但同时又告诉我 4 和 6 不是质数,我很困惑。
(defvar *prime* nil)
(defun primeCheck (x y)
(if (and (>= x y) (not (= (mod x y) 0)))
(progn
(setf y (+ y 1))
(primeCheck x y)
(setf *prime* 'yes))
(setf *prime* 'no))
)
(primeCheck 9 2)
(if (equal *prime* 'yes) (print "Number is prime") (print "Number is not prime"))
我建议您下载一些 IDE(例如 LispWorks 个人版)或查找 Common Lisp 的在线 REPL 和 运行 您的代码。你的错误:
("prime number")
是格式错误的列表。将其替换为(print "prime number")
primeCheck
调用一些(尚未)未定义的函数modulus
(*prime-Check* nil)
是一个格式错误的列表。替换为(setf *prime-Check* nil)
- 格式错误
cond
和and
- 经过所有这些更正后,它不适用于 2、3、5 等
很多地方都不对。
如何使用原性测试,例如来自 SICP(计算机程序的结构和解释)?
;; from SICP (here in clojure)
;; http://www.sicpdistilled.com/section/1.2.6/
(defun smallest-divisor (n)
(find-divisor n 2))
(defun square (n)
(* n n))
(defun find-divisor (n test-divisor)
(cond ((> (square test-divisor) n) n)
((dividesp test-divisor n) test-divisor)
(t (find-divisor n (1+ test-divisor)))))
(defun dividesp (a b)
(zerop (mod b a)))
(defun primep (n)
(= n (smallest-divisor n)))
primep
测试主要性。