这是我正在翻译的一部分。我一直收到这个错误:
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)
答案 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编程的好书并开始用更实用的方式编写代码,目前你的代码不是惯用的,你迟早会遇到麻烦。