我觉得Common Lisp中的代码应该是一个非常简单的代码,我想要它做的就是要求用户输入,然后将其打印回来。
这是我的代码("之前""""打印是试图调试,它显示出奇怪的东西。
(defun get-input (prompt)
(clear-input)
(write-string prompt)
(finish-output)
(read-line)
)
(let (
(p1 (get-input "Enter: "))
)
(princ "Before")
(princ p1)
(princ "After")
)
当我运行时,我得到以下
This is SBCL 1.2.1, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
WARNING: the Windows port is fragile, particularly for multithreaded
code. Unfortunately, the development team currently lacks the time
and resources this platform demands.
* (load "test.lisp")
Enter: This is my string.
AftereThis is my string.
T
正如你所看到的,我的&#34;之前&#34;字符串甚至不打印,我的&#34; After&#34;字符串有一个奇怪的&#34; e&#34;到底?为什么我第一次运行程序时似乎要求输入?
如果有人能提供帮助,我将不胜感激。感谢
答案 0 :(得分:2)
我相信这就是正在发生的事情,按顺序:
p1
的表达式;这会产生你的提示&amp;读取您的输入p1
的值,我认为(最后)在末尾有一个回车符,以便下一个要打印的内容出现在行的开头答案 1 :(得分:0)
来自sam的其他信息:Windows下的SBCL。
嗯,是的。 SBCL的Windows端口非常粗糙。请参阅输出中的警告:
警告:Windows端口易碎,特别是对于多线程 码。不幸的是,开发团队目前缺乏时间 和平台需要的资源。
SBCL来自Linux / Unix / ...世界。 Windows的端口做出的假设对Linux / Unix / ...有效,但不适用于Windows。
有一件事是线路终止。 Windows使用CRLF。 Unix使用LF。 Windows下的SBCL使用LF,IIRC。可能这可以以某种方式配置。
如果您现在在Windows下使用一个期望CRLF约定并使用LF约定使用SBCL创建直接输出的shell,那么您可能会得到奇怪的输出......
因此可能的解决方案是:
使用支持Windows约定的Lisp。问题:没有多少。有很好的,比如LispWorks和Allegro CL,但它们相对昂贵。我不知道Clozure CL是如何做到的 - 它也可以在Windows下运行并且是免费的......
了解如何配置SBCL以使用Windows I / O约定。 - &GT; SBCL邮件列表
重新配置您的终端/ shell以使用Unix LF约定
我无法重现(Mac上终端中的CLISP和SBCL):
<强> CLISP 强>
rjmba:~ joswig$ clisp
i i i i i i i ooooo o ooooooo ooooo ooooo
I I I I I I I 8 8 8 8 8 o 8 8
I \ `+' / I 8 8 8 8 8 8
\ `-+-' / 8 8 8 ooooo 8oooo
`-__|__-' 8 8 8 8 8
| 8 o 8 8 o 8 8
------+------ ooooo 8oooooo ooo8ooo ooooo 8
Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>
Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2010
Type :h and hit Enter for context help.
[1]> (load "/tmp/g.lisp")
;; Loading file /tmp/g.lisp ...
Enter: hello
BeforehelloAfter
;; Loaded file /tmp/g.lisp
T
[2]> (quit)
<强> SBCL 强>
rjmba:~ joswig$ sbcl
This is SBCL 1.1.16, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (load "/tmp/g.lisp")
Enter: hello
BeforehelloAfter
T
您可能想告诉我们您的具体实现和平台组合,以及Common Lisp输出的位置......