方案定义错误(短)

Scheme definition error(short)

这是我正在制作的解释器的一部分。我不断收到此错误:

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)

在你的解释器中,定义似乎只能出现在函数的开头。您应该改用 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 编程的好书,并开始以更函数式的风格编写代码,目前你的代码不是惯用的,你迟早会遇到麻烦。