Ser*_*lla 3 scheme namespaces chicken-scheme
命名空间如何在Chicken Scheme中起作用?我现在正在使用parleyegg,当我定义一个具有名称的函数时read,由于名称冲突而导致错误(实际上,因为我read覆盖了parley自己read,并且它被调用了错误的类型.
这是代码:
(use parley)
(define (read p) p) ; This `read` function conflicts.
(let loop ((l (parley "> ")))
(if (or (eof-object? l)
(equal? l "quit"))
(print "bye!")
(begin
(printf "you typed: ~s~%" l)
(loop (parley "> ")))))
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免像这样的碰撞?
UPDATE
我已经减少了重现这个的必要代码:
(use parley)
(define (read p) p)
Run Code Online (Sandbox Code Playgroud)
这会收到以下错误:
Error: illegal non-atomic object: #<input port "readline.scm">
显然,我的read功能正在发生冲突parley read.但我不知道如何在不重命名我的功能的情况下避免这种情况.
根据文档,您可以使用与在模块中导入模块时相同的技巧.然后你有很多选项,比如前缀:
(use (prefix parley parley:)) ; all imported symbols have been prefixed with "parley:"
Run Code Online (Sandbox Code Playgroud)