Scheme 素数分配方案
我有一个Scheme赋值,我需要显示2-100范围内的整数是否为素数。我知道这个方案不允许改变一个变量的值,但考虑到我是如何做到这一点的,我想知道这是否是固定的Scheme 素数分配方案,scheme,Scheme,我有一个Scheme赋值,我需要显示2-100范围内的整数是否为素数。我知道这个方案不允许改变一个变量的值,但考虑到我是如何做到这一点的,我想知道这是否是固定的 (let loop ((i 2)) (begin (print "") (let loop ((j i)) (begin () (if (and (= (mod i j) 0) (not (= i j)))
(let loop ((i 2))
(begin (print "")
(let loop ((j i))
(begin ()
(if (and (= (mod i j) 0) (not (= i j)))
(print i " is NOT PRIME"))
(if (= j 2)
(print i " is PRIME")
(loop (- j 1)))))
(if (= i 100)
(print "done first")
(loop (+ i 1)))))
目前,您需要忘记循环的计数,寻找递归模式和有用的抽象 例如,这段代码可能是有用的
(define (test n)
(if (prime? n)
(begin (display i) (display " is prime.") (newline))
(begin (display i) (display " is NOT prime.") (newline))))
另外,
(let loop((var binding)…)body)
并不是您所认为的那样。对于i=x,它不是C的变体。
循环在这里只是一个名称,你可以很容易地称它为hiccup或rose。该表单用于定义内部递归函数并使用特定表达式调用它也可以,但子函数无法从高度描述性的函数和自由变量名中受益。Scheme允许使用集合更改变量代码>除了你编写代码的奇怪方式之外,我担心如果你使用这种算法来检测素数,你将无法通过考试。检查素数为100的最直接方法是保留一个向量,并查看输入是否在该向量中。到100的素数不多,谢谢。我试试这个。prime?
的定义由您自己来写。这里的提示是,你只需要检查小于或等于n的平方根的数字的整除性,因为n的整数因子成对出现,其中一个必须小于平方根。