2017-06-05 95 views
0

我有一个关于LISP程序设计语言问题如何读取文件,并保存数据在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语言完全适应:(

非常感谢!

+0

你的函数定义是错误的。你不要把参数列表中的字符串,你把变量名称。 – Barmar

+0

数据不保存在任何地方,函数只是返回它读取的所有行的列表。 – Barmar

+1

由于参数列表不正确,您应该一旦输入函数定义就会收到错误。 – Barmar

回答

1
get-file 
("sample.txt") 

两种表达方式。其中,用于评估变量get-file因为它不是用作函数。然后你有("sample.txt")这个表达式,它试图将字符串“sample.txt”作为一个函数来调用,没有参数

原因是您正在编写algol语法,就好像它是C或Java一样。你需要写的时候你正在写口齿不清,这样的LISP语法:

(get-file "sample.txt") 

所以如果你为你口齿不清文件将开始从同一目录下的程序的路径名相对于启动程序的路径在那里打开文件。如果你在你的主目录,那么路径是相对的,除非你使用绝对路径。

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

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

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

相关问题