【发布时间】:2018-05-04 03:13:06
【问题描述】:
我正在阅读 sicp 并且正在编写一个程序来从 1,000 中找到前 3 个素数。我正在使用费马方法的更改版本(但是在这种情况下该算法无关紧要,因为我只需要了解错误消息)。整套代码为:
(define (fz-prime number count)
(if (< count 4)
(if (= (fz-fermat-loop number 1) 0)
(fz-prime (+ number 1) count)
((display number) (fz-prime (+ number 1) (+ count 1))))))
(define (fz-fermat-loop number count)
count
(if (> count 5)
1
(if (= (fz-fermat-test number (fz-random number)) 0)
0
(fz-fermat-loop number (+ count 1)))))
(define (fz-fermat-test number count)
(if (= (modulo count number) (modulo (fz-exp-wrapper count number) number))
1
0))
(define (fz-random number)
(random (- number 2)))
(define (fz-exp-wrapper base power)
(fz-exp base power 1))
(define (fz-exp base power result)
(if (<= power 0) result
(fz-exp base (- power 1) (* result base))))
(fz-prime 1000 1)
现在每次我运行代码时,它都会显示以下错误:
100910131019. . application: not a procedure;
expected a procedure that can be applied to arguments
given: #<void>
arguments...:
前 3 个数字是前三个质数,但我不明白错误消息的含义。
【问题讨论】:
-
由于 John 提到了几个问题,我不会将其标记为重复,但错误消息与 My code signals the error “application: not a procedure” or “call to non procedure” 相关,特别是答案中的“尝试对表达式进行分组或创建块”。
标签: function scheme function-call application-error