首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LISP/Nyquist打开文件并逐行读取

LISP/Nyquist打开文件并逐行读取
EN

Stack Overflow用户
提问于 2012-01-20 21:44:21
回答 1查看 502关注 0票数 0

我在努力打开一个文件,读每一行直到EOF。我使用的是nyquist,它基于XLISP,缺乏Common的with-open-file。我的代码是:

代码语言:javascript
复制
(let ((in_file (open "/home/soodesune/testfile.csv" :if-does-not-exist nil)))
    (loop for line = (read-line in_file)
         while line do (print line))
    (close in_file))

nyquist的输出是:

代码语言:javascript
复制
error: unbound variable - LINE

我希望有人能帮我了解我哪里出了问题

注:我也尝试过:

代码语言:javascript
复制
(loop for line = (read-line in_file nil)

但这意味着:

代码语言:javascript
复制
error: too many arguments

更新:

使用Rainer提供的信息和链接,我能够找到打开文件并逐行读取文件的典型代码:

代码语言:javascript
复制
  1 (do* ((fp (open "test.dat" :direction :input))
  2       (ex (read fp nil) (read fp nil)))
  3  ((null ex) (close fp) nil)
  4  (print ex))

do函数有三个基本部分:

  1. 第1行和第2行-分配给循环中使用的变量、它们的初始值以及如何增加它们。在本例中,fpexfp不是递增的,ex是从fp (我不知道跟踪nil用于什么)
  2. 第3行(循环的退出条件和return expressions的列表)中初始化和递增的,所有这些都是在退出时计算的,最后一个是返回的。在这种情况下,当returned
  3. line 4(循环的实际主体)为ex == nullnil时,就会出现退出。在本例中,不言自明。

注意:do*do的不同之处在于它允许在一个表达式中分配的变量在以后的表达式中使用,比如在分配ex时如何使用fp

我是一个完全的n00b在任何一种LISP,所以如果上面的任何一个是错误的,请说出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-20 22:06:05

Nyquist不是基于Common的。它的基础是一个早期的XLISP。它只支持简单的循环,而不支持Common的复杂循环。

见Nyquist手册:

http://www.cs.cmu.edu/~rbd/doc/nyquist/part19.html#226

它的循环语法是:

代码语言:javascript
复制
(loop expr...)

它不支持Common的扩展循环语法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8948237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档