我仍然在自己设计程序的练习中插入,但又设法再次卡住了。这一次,它的问题11.4.7:使用自然递归在Scheme中查找素数
的是 - 不除尽,<开发功能 =我。它消耗了自然数[> = 1] i和自然数 ,其中i为< m。如果m不是 可被1 (不包括)和i(包括)之间的任何数字整除,则 函数会生成true;否则,其 输出是错误的。
使用是-未除尽-由< = i到限定 素?,这消耗了自然数 和确定是否不 它是素数。
我没有太多苦时间第一部分:
;; A natural number [>=1] is either 1. 1 or
;; 2. (add1 n) where n is a natural number [>=1].
;; is-not-divisible-by<=i : N[>=1] N -> boolean
(define (is-not-divisible-by<=i i m)
(cond
[(= i 1) true]
[else (cond
[(= (remainder m i) 0) false]
[else (is-not-divisible-by<=i (sub1 i) m)])]))
(is-not-divisible-by<=i 3 6) ; expected: false.
(is-not-divisible-by<=i 6 7) ; expected: true.
但我只是不明白我怎么可以使用一个变量,而使用天然递归来做到这一点。我想过使用一个列表,但是也出现了相同的问题。
我能看到的唯一解决办法是给出另一个变量 - 让我们假设x--与n相同的值,然后按照这种方式是不可分割的 - < =我这样做。但我认为作者打算让我以其他更简单的方式做到这一点。 (而且我甚至不知道该怎么做我所描述的东西,哈哈。)
这个问题确实是在破坏我的屁股,所以如果可以的话,任何帮助或提示都会很棒!
哦,jeeze,这很尴尬。我认为,如果我这样做了,那么每次函数被递归调用时,两个n的值都会继续下降1。我不认为(sub1 n)会被当作一个x来处理,但是作为一个n,它根本没有什么意义。 非常感谢! – 2010-07-27 16:33:41
这完全取决于你是否按照数值(不能改变)或变量(可以改变)来考虑...... http://www.nicollet.net/2010/01/quick-test/;) – 2010-07-27 16:39:06