我知道这应该很简单。但是我是这种语言的新手,语法很难理解。
我做了一个函数来检查它是否是质数,而更大的函数只会创建仅包含质数的列表。
输入是任何给定的数字列表。假设'(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)))
))
我只是得到列表2
答案 0 :(得分:4)
您的程序中有几个问题。
首先,primeHelper
是错误的。例如,使用(primeHelper 33 2)
进行尝试:它将返回#t,但33不是质数。
这里是正确的版本(具有递归功能):
(define (primeHelper x i)
(cond ((<= x 1) #f)
((= x 2) #t)
((>= i x) #t)
((zero? (modulo x i)) #f)
(else (primeHelper x (+ i 1)))))
此外,prime
函数错误,其递归不正确。这是一个可能的正确版本:
(define (prime lis)
(cond ((null? lis) '())
((primeHelper (car lis) 2) (cons (car lis) (prime (cdr lis))))
(else (prime (cdr lis)))))
尝试一下:
(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)