Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Q我已经做了一个程序来查找lisp中的素数,但它不起作用_Lisp - Fatal编程技术网

Q我已经做了一个程序来查找lisp中的素数,但它不起作用

Q我已经做了一个程序来查找lisp中的素数,但它不起作用,lisp,Lisp,如果您愿意,它将使您的代码更容易让其他人阅读 将在新行中开始每个顶级表单 n-1不是lisp。尝试(-n1) 循环中需要一个do。即: (i从2到(-n1)的循环执行… 换言之: (princ "ENTER ANY NUMBER : ") (setq n (read)) (setq flag 0) (loop for i from 2 to n-1 (if (=(mod n i)0) (setq flag 1))) (if (= flag 0) (for

如果您愿意,它将使您的代码更容易让其他人阅读 将在新行中开始每个顶级表单

  • n-1
    不是lisp。尝试
    (-n1)

  • 循环中需要一个
    do
    。即:

    (i从2到(-n1)的循环执行…

  • 换言之:

    (princ "ENTER ANY NUMBER : ")
    (setq n (read))
    (setq flag 0)
    
    (loop for i from 2 to n-1
        (if (=(mod n i)0)
            (setq flag 1)))
    
    (if (= flag 0)
        (format t "~d IS A PRIME NUMBER"n)
        (format t "~d IS NOT A PRIME NUMBER"n))
    

    n-1
    是一个符号,在您的例子中,它是一个未绑定的符号(也就是说,它本身没有值)。您可能是指
    (-n1)
    (1-n)
    中的一个(它们都有“n减去1”的值)

    一般来说,您不需要遍历所有小于
    n
    的数字,只需遍历
    (isqrt n)
    (数字的整数平方根,如果您查看的是平方数,这是正平方根,并且始终至少与非素数的因子一样大)

    不要使用标志变量并设置它们,而是将素性检查器包装在函数中,并在找到因子之前返回

    (princ "ENTER ANY NUMBER : ")
    (setq n (read))
    (setq flag 0)
    (loop for i from 2 to (- n 1) do
         (if (= (mod n i) 0)
             (setq flag 1)))
    (if (= flag 0)
        (format t "~d IS A PRIME NUMBER"n)
      (format t "~d IS NOT A PRIME NUMBER"n))
    

    为什么它不工作?你得到了什么错误?你期望得到什么输出?
    (defun primep (n)
      (loop for i from 2 upto (isqrt n)
        if (zerop (mod n i))
        do (return-from primep nil))
      'prime)