Lisp 有没有更好的方法返回给定数字列表中的素数列表

Lisp 有没有更好的方法返回给定数字列表中的素数列表,lisp,racket,Lisp,Racket,我知道这应该很简单。但我对这种语言还不熟悉,语法也很难理解 我做了一个函数来检查它是否是素数,更大的函数只会创建一个只有素数的列表 输入是任何给定的数字列表。让我们说’(2 3 7 8 4),那么它只应该返回’(2 3 7) 因此,我已经检查了我的primeHelper是否正在工作,是否只是用不同的号码呼叫primeHelper (define (primeHelper x i) (cond ((<= x 1) #f) ((= x 2) #t) ((= x 3)

我知道这应该很简单。但我对这种语言还不熟悉,语法也很难理解

我做了一个函数来检查它是否是素数,更大的函数只会创建一个只有素数的列表

输入是任何给定的数字列表。让我们说’(2 3 7 8 4),那么它只应该返回’(2 3 7)

因此,我已经检查了我的primeHelper是否正在工作,是否只是用不同的号码呼叫primeHelper

(define (primeHelper x i)
  (cond
    ((<= x 1) #f)
    ((= x 2) #t)
    ((= x 3) #t) 
    ((zero? (modulo x i)) #f)
    ((not(zero? (modulo x i))) #t) 
    (else (primeHelper x (+ i 1)))))

(define (prime lis)
  (cond
    ((null? lis) (display "() list"))
    ((not(list? lis)) (display "this is an atom"))
    ((eq? (primeHelper (car lis) 2) #t)(cons (car lis) '()))
    (else (prime (cdr lis)))
    ))
(定义(primeHelper x i)
(续)

(您的程序中有几个问题

首先,
primeHelper
是错误的。例如,使用
(primeHelper 33 2)
尝试它:它将返回#t,但33不是质数

以下是正确的版本(带有递归函数):

让我们试试看:

(prime '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23))
'(2 3 5 7 11 13 17 19 23)

您的程序中有几个问题

首先,
primeHelper
是错误的。例如,使用
(primeHelper 33 2)
尝试它:它将返回#t,但33不是质数

以下是正确的版本(带有递归函数):

让我们试试看:

(prime '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23))
'(2 3 5 7 11 13 17 19 23)

如果你只得到了
2
,那么一定有更好的方法。具体来说,任何给你正确答案的方法都比给你错误答案的方法好,不管后者的速度有多快:-)如果你只得到了
2
,那么一定有更好的方法。具体来说,任何给你正确答案的方法都比给你错误答案的方法好,不管后者的速度有多快:-)
(prime '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23))
'(2 3 5 7 11 13 17 19 23)