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))