方案定义错误(短)

时间:2015-04-02 20:12:06

标签: scheme racket r5rs

这是我正在翻译的一部分。我一直收到这个错误:

define not allowed in an expression context in: (define ret1 (list->string wl))

我正在使用DrScheme版本371,语言标准(R5RS)。

(define (read-command)
  (set! com '( '() ))
  (set! wl (read-as-list))
  (define ret1 (list->string wl))
  (commRead)
  ret1
 )

类似的问题:

    (define repl(
                 lambda()
                  (display "\nUofL>")
                  (define inp (read-command))
                  (define lengtha (length com)

1 个答案:

答案 0 :(得分:1)

在你的翻译中,似乎定义只能出现在函数的开头。您应该使用let*代替:

(define (read-command)
  (let* ((com '('())) ; are you sure you didn't mean '(()) ?
         (wl (read-as-list))
         (ret1 (list->string wl)))
  (commRead ret1)))

对于第二个问题,请尝试:

(define repl
  (lambda ()
    (display "\nUofL>")
    (let ((inp (read-command))
          (lengtha (length com)))
      ; return a value here
      )))

作为旁注,您的代码似乎是以程序样式编写的 - 所有set!和函数调用都是针对该效果执行的。如果你不将它作为参数传递给ret1,那么commRead如何被修改?我建议你阅读一本关于Scheme编程的好书并开始用更实用的方式编写代码,目前你的代码不是惯用的,你迟早会遇到麻烦。