Scheme 检查一个数字是否为素数

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

我正在写一个小函数来检查一个数是否是素数。我很难转换我如何检查它在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)
            (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,而所有事情都必须递归完成的想法是一个挑战。