如何在LISP编程语言中读取文件和保存数据

时间:2017-06-05 15:32:49

标签: lisp common-lisp file-read

我对LISP编程语言有疑问

我要做的是读取文件并将数据保存在文件中。

为此,我发现了这样的功能并执行了它。

(defun get-file (pathname)
  (with-open-file (stream pathname)
    (loop for line = (read-line stream nil)
          while line
          collect line)))

get-file("sample.txt")

这个打印的"未绑定的变量"。为什么错误发生了? (如果我刚刚定义了函数并编译,则没有错误)

如何正确编写路径名? (我的数据文件(sample.txt)与LISP代码文件位于同一目录中。)

数据保存在哪里?

我如何划分它们(因为文件是逐行读取的,具有单独属性的数据应保存在同一行中)

文件数据保存为

name 23.0 22 123 33  //(one string and four numbers)
name2 23.5 11 156 42 //(one string and four numbers)
name3 21.7 15 167 55 //(one string and four numbers)

请帮帮我 我在LISP语言中很尴尬,因为我完全适应了C语言:(

非常感谢!!

1 个答案:

答案 0 :(得分:1)

get-file 
("sample.txt")

是两个表达式。一个用于评估变量get-file,因为它不用作函数。然后你有表达式("sample.txt")试图取字符串" sample.txt"并将其称为具有无参数的函数。

原因在于您正在编写 algol语法,就好像它是C或Java一样。在编写lisp时需要编写lisp语法,如下所示:

(get-file "sample.txt")

路径名相对于启动程序的路径,因此如果从与lisp文件相同的目录启动程序,它将在那里打开文件。如果您在主目录中,路径是相对于该路径,除非您使用绝对路径。

为了保存数据,您需要打开一个文件以保存并输出到该文件。现在你是如何制作一个行列表,并且在REPL中没有返回任何屏幕。

您可以按空格分割字符串。您可以使用parse-number将表示数字的字符串转换为数字。不安全的方式是(read-from-string "3.0") ; ==> 3.0

你需要准备好自己学习一门新语言。它的语法与C不同,后者基于Algol。今天几乎所有的编程语言都是如此,如果你知道几种语言,你可能知道相同语言的几种方言。给它时间,你很快就会有一种新的编程语言..