首页 > 解决方案 > 在 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...:

我看到我的递归调用很好,所以我无法知道哪个是问题所在。

标签: scheme

解决方案


beginis (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 (...))将工作。)


推荐阅读