【发布时间】:2017-06-25 11:17:18
【问题描述】:
上下文:
我有一个名为 fr.txt 的文本文件,其中包含 3 列文本:
65 A #\A
97 a #\a
192 À #\latin_capital_letter_a_with_grave
224 à #\latin_small_letter_a_with_grave
etc...
我想创建一个函数来读取第一列(最终也是第三列)并将其写入另一个名为 alphabet_code.txt 的文本文件中。
到目前为止我有这个功能:
(defun alphabets()
(setq source (open "fr.txt" :direction :input :if-does-not-exist :error))
(setq code (open "alphabet_code.txt" :direction :output :if-does-not-exist :create :if-exists :supersede))
(loop
(setq ligne (read-line source nil nil))
(cond
((equal ligne nil) (return))
(t (print (read-from-string ligne) code))
)
)
(close code)
(close source)
)
我的问题:
我不太明白read-line的参数是怎么起作用的。我读过this doc,但对我来说仍然很模糊。如果有人有非常简单的例子,那会有所帮助。
使用当前代码,我收到此错误:
*** - read: input stream #<input string-input-stream> has reached its end,即使我将(read-line source nil nil)中的nil nil更改为其他值。
感谢您的宝贵时间!
【问题讨论】:
-
您不能使用 SETQ 创建局部变量。你从哪里得到 SETQ 的这种用法?
-
@RainerJoswig:为什么?这就是我的教授在课程中使用的。
-
因为 SETQ 被定义为设置现有变量。它不引入新变量,尤其是局部变量。局部变量例如由 LET 和 LET* 引入。如果您的教授在您的示例中使用 SETQ,您可能会非常小心地告知他/她,这是错误的。如果他/她有任何问题,欢迎来到 Stackoverflow,我们会解释...
-
@RainerJoswig:我认为这种普遍使用赋值运算符进行绑定的尝试可能是 Python 的脑损伤。赋值和绑定的混淆可能是 Python 最糟糕的一个特性。
标签: file-io lisp common-lisp