通过Scheme中的if语句传递参数会导致错误

时间:2016-10-08 23:25:49

标签: scheme racket

我刚开始接受计划,而且我不确定我做错了什么。

(let ((fn (car last-elem))
      (output(if (> (length last-elem) 1) ;or = needed?
                (cdr last-elem)
                ( '() ))))

(cond ((equal? fn 'dim) (dim output))
      ((equal? fn 'print) (print output))

这段代码应该生成语句然后传递给print,我的测试用例是Hello,World!

现在打印(以后会有更多内容,所以我需要一个新功能)就是这样:

(define (print args)
    (display(args))
    (newline)

这出错了:

申请:不是程序;  期望一个可以应用于参数的过程   给出:("你好,世界!")   参数......:[无]   上下文...

我想我正处于写作轨道上,因为我希望获得的输出存在于"给定。"但我希望这只是印刷。

我知道关于这个错误还有其他一些问题,但他们的解决方案都没有帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,print过程有一组额外且不正确的括号,它应如下所示:

(define (print args)
  (display args)
  (newline))

当你得到"申请时:不是程序;期待一个程序"错误,这意味着您使用括号错误,在方案(f)中意味着您正在尝试应用 f作为无参数过程,如果f不是程序,则会收到错误。