Scheme 检查一个数字是否为素数
我正在写一个小函数来检查一个数是否是素数。我很难转换我如何检查它在C++到方案。主要是或运算符Scheme 检查一个数字是否为素数,scheme,racket,Scheme,Racket,我正在写一个小函数来检查一个数是否是素数。我很难转换我如何检查它在C++到方案。主要是或运算符 if( ( (n % 2) == 0) || (n != 1) ) ***recursive again*** else "Done"; (define prime (lambda (n) (if (= n 1) n (if (or (= (modulo n 2) 0) (not ( = n 1))) prime(n) (displ
if( ( (n % 2) == 0) || (n != 1) )
***recursive again***
else
"Done";
(define prime
(lambda (n)
(if (= n 1) n
(if (or (= (modulo n 2) 0) (not ( = n 1))) prime(n)
(display "Done")
)
)
)
)
谢谢这里有一个识别素数的简单函数:
(define (prime? n)
(let loop ((d 2))
(cond ((< n (* d d)) #t)
((zero? (modulo n d)) #f)
(else (loop (+ d 1))))))
(定义(素数?n)
(let循环((d2))
(cond(
你们对Scheme和素数有很多误解。和你的老师谈谈;这就是他在那里的目的。命名循环是一个高级工具,如果这是家庭作业,我猜老师正在寻找类似的东西,使用局部函数定义来进行递归
(define (prime? n)
(define (f n c)
(cond [(< n (* c c)) #t]
[(zero? (modulo n c)) #f]
[else (f n (add1 c))]))
;in
(f n 2))
(定义(素数?n)
(定义(f n c)
(cond[(
到底是什么问题?错误?意外输出?我在编译时出错。在我的第二个if语句中声明了错误的语法。没有什么区别您编写的函数不会识别素数,即使您修复了语法。由于你似乎讲C++,所以我建议先在C++中写一个工作<代码> iSyPrime(n)< /C>功能,然后一旦工作,就转换成方案。你有三个分支:<代码> Prime < /C> >,<代码>(n)< />代码>和<代码>(显示完成)。复习你书中的Scheme语法。谢谢!是的,我正在学习如何使用scheme,而所有事情都必须递归完成的想法是一个挑战。