Lisp 如何定义用于读取单词列表的函数
我想将包含单词列表(每行一个单词)的文件读入列表Lisp 如何定义用于读取单词列表的函数,lisp,newlisp,Lisp,Newlisp,我想将包含单词列表(每行一个单词)的文件读入列表 (define (read-wordlist myFile) (begin (set 'listA '()) (set 'in-file (open myFile "read")) (while (read-line in-file) (set 'listA (append listA (list (current-line))))) (close in-file))) 此函数将文件读入列表l
(define (read-wordlist myFile)
(begin
(set 'listA '())
(set 'in-file (open myFile "read"))
(while (read-line in-file)
(set 'listA (append listA (list (current-line)))))
(close in-file)))
此函数将文件读入列表listA
假设我在wordlist.txt中有
Lemon
Orange
Lime
Mango
Pawpaw
Strawberry
Apple
Watermelon
Banana
我明白了
2参数
我现在想要一个函数,它可以将文件读入一个列表中,我可以在其中指定名称
(define (read-wordlist2 myFile myList)
(begin
(set myList '())
(set 'in-file (open myFile "read"))
(while (read-line in-file)
(set myList (append myList (list (current-line)))))
(close in-file)))
然而,电话
(read-wordlist2 "wordlist.txt" 'myWordList)
给出了错误
ERR: array, list or string expected in function append : myWordList
called from user defined function read-my-file2
如何更改read-wordlist2
的定义以使其生效?您没有引用列表:
(define (read-wordlist2 myFile myList)
(begin
(set 'myList '())
(set 'in-file (open myFile "read"))
(while (read-line in-file)
(set 'myList (append myList (list (current-line)))))
(close in-file)))
但也可能有更好的方法来做到这一点<代码>读取文件
在这里很有用。和push
是添加到列表的更好方法。上下文提供了字典和散列功能,这些功能通常更快、更有用
更惯用的说法是:
(define (read-wordlist my-file)
(let ((in-file (open my-file "read"))
my-list '())
(while (read-line in-file)
(extend my-list (list (current-line))))
(close in-file)
my-list))
(set 'word-list (read-wordlist "/tmp/wordlist.txt"))
更直截了当的是:
(set 'word-list (parse (read-file "/tmp/wordlist.txt") "\n" 0))
参考:调用
(read-wordlist2“wordlist.txt”'listofruits)
返回true
。但是listofruits
则是nil
。(在newLisp中进行评估)是的,您的功能成功。但是最好在函数末尾返回myList
的值,否则它将被丢弃;它是函数定义的局部。如果要通过引用传递符号,请使用。parse
的第三个参数是什么意思,即0?这只是我使用正则表达式解析文本的习惯,对不起…:)
(set 'word-list (parse (read-file "/tmp/wordlist.txt") "\n" 0))