scheme - 在 Scheme 中打印中间结果
问题描述
我想制作一个模拟for循环的转换程序,例如:
orig value converted
1 2.2
2 4.4
...
199 437.8
到目前为止,我所做的如下:
(define (conv ini)
(if (> ini 199)
0
(begin(
(display (* ini 2.2))
(newline)
(conv (+ ini 1))))))
但是当我想运行它时,出现以下错误:
arity mismatch;
the expected number of arguments does not match the given number
expected: 1
given: 2
arguments...:
我看到我的递归调用很好,所以我无法知道哪个是问题所在。
解决方案
begin
is (begin form ...)
not的语法(begin (form ...))
:你的函数应该是
(define (conv ini)
(if (> ini 199)
0
(begin
(display (* ini 2.2))
(newline)
(conv (+ ini 1)))))
(或者,如果你喜欢这样的语法,你可以定义
(define-syntax beguine
(syntax-rules ()
[(_ (form ...))
(begin form ...)]))
然后(beguine (...))
将工作。)