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