方案定义错误(短)
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 编程的好书,并开始以更函数式的风格编写代码,目前你的代码不是惯用的,你迟早会遇到麻烦。
这是我正在制作的解释器的一部分。我不断收到此错误:
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 编程的好书,并开始以更函数式的风格编写代码,目前你的代码不是惯用的,你迟早会遇到麻烦。