【问题标题】:Display to output port in a recursive procedure - Scheme在递归过程中显示到输出端口 - 方案
【发布时间】:2011-12-27 16:40:59
【问题描述】:

我正在学习Scheme,想写一个递归程序,在每个运行级别输出到控制台:

(define (dummy count)
    (if (= 0 count)        
        (runtime)
        ((display "test" console-i/o-port) (dummy (- count 1)))))

然后测试:

(dummy 10)

但似乎只有最后一个调用过程的输出才会被打印出来。 我应该怎么做才能让它发生?谢谢。 (我使用的是 Mit-scheme)

【问题讨论】:

  • 你到底想展示什么?计数的当前值?还是“测试”这个词count 的次数?
  • 是的,就是“测试”这个词。没关系对吧。我只是想知道为什么只打印了一个单词“test”。
  • 好,看看我下面的答案,它就是这样做的,以一种简单的方式

标签: recursion scheme mit-scheme


【解决方案1】:
((display "test" console-i/o-port) (dummy (- count 1)))

这是一个函数调用,其中(display "test" console-i/o-port) 是应该调用的函数,(dummy (- count 1)) 是该函数的参数。由于 `(display "test" console-i/o-port) 实际上并没有返回函数,这会导致错误(打印 test 之后)。

要做你真正想做的事情(先执行(display ...),然后执行(dummy ...)),你可以像这样使用begin形式:

(begin (display "test" console-i/o-port) (dummy (- count 1)))

【讨论】:

  • 感谢您的回答。所以在方案中,这个结构的所有东西(A B C..D),A 必须是这样的,A 是一个函数,其余的是参数。为什么我仍然在 SCIP 书籍程序中看到 ((print a)(print b))?。
【解决方案2】:

如果您想要显示“测试”count 的次数(示例中为 10),您可以执行以下操作(假设 count 是肯定的):

(define (dummy count)
  (if (> count 0)
      (begin 
        (display "test" console-i/o-port)
        (dummy (- count 1)))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多