我想让我的Scheme程序导入字符串,而不需要在字符串之前使用open-input-string。因此,例如,现在我可以做到以下几点:将字符串导入Scheme而不使用开放输入字符串
> (scheme_lexer (open-input-string "3+4*2"))
但是,是有我的程序协同工作的方式,如果我输入字符串这样?:
> (scheme_lexer ("3+4*2"))
谢谢!
我想让我的Scheme程序导入字符串,而不需要在字符串之前使用open-input-string。因此,例如,现在我可以做到以下几点:将字符串导入Scheme而不使用开放输入字符串
> (scheme_lexer (open-input-string "3+4*2"))
但是,是有我的程序协同工作的方式,如果我输入字符串这样?:
> (scheme_lexer ("3+4*2"))
谢谢!
有什么特别的原因,你不能只是做一个scheme_lexer_string
函数处理字符串打交道时,这是否适合你?额外的括号看起来很混乱,而且它们是宏观唯一真正的解决方案。如果丢弃的要求,并做出类似(scheme_lexer "3+4*2")
可以接受的,你可以让一个普通的功能,用于处理字符串:
(define (scheme_lexer_string s)
(scheme_lexer (open-input-string s)))
如果你想要的是处理两个输入端口和字符串的函数,你可以做一个一般功能根据特定函数的参数类型进行分派。在这种情况下,原来的scheme_lexer
将被重新命名为scheme_lexer_input_port
,你将有以下功能:
(define (scheme_lexer_string s)
(scheme_lexer_input_port (open-input-string s)))
(define (scheme_lexer in)
(if (string? in)
(scheme_lexer_string in)
(scheme_lexer_input_port in)))
现在scheme_lexer
作品字符串和端口,并分发到正确的功能所需。
> (scheme_lexer some-input-port)
... evaluates the content in the port
> (scheme_lexer "abcd")
... evaluates the string "abcd"
这工作。非常感谢! – jean28 2014-10-12 07:49:38
这里有一个选项。我已经使用测试功能lexer
只是为了显示宏。您可以根据自己的需求进行调整。
(define (lexer sp) (read sp))
(define-syntax scheme_lexer
(syntax-rules()
((_ (input))
(lexer (open-input-string input)))))
,并测试:
> (scheme_lexer ("3+4*2"))
'3+4*2
如果有任何答案适合您。请接受它。 – Rptx 2014-10-01 15:37:50