首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件返回单词列表

从文件返回单词列表
EN

Stack Overflow用户
提问于 2010-11-08 11:10:55
回答 2查看 2.1K关注 0票数 3

我的下一个项目是写一个绞刑者游戏。我认为它可以帮助我温习字符串和文件I/O。

目前,我只能将字符串文件读入列表。我正在尝试避免使用全局变量,所以有人能给我指出正确的方向,使这些(可能是损坏的)代码变成一个返回列表的函数吗?

代码语言:javascript
复制
(defun read-word-list ()
  "Returns a list of words read in from a file."
  (let ((word-list (make-array 0 
                 :adjustable t
                 :fill-pointer 0)))
       (with-open-file (stream #p"wordlist.txt")
     (loop for line = (read-line stream)
        while line
          (push line word-list)))
       (select-target-word word-list)))))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-08 13:50:27

您只需几行代码即可将单词读入为Lisp符号:

代码语言:javascript
复制
(defun read-words (file-name)
    (with-open-file (stream file-name)
      (loop while (peek-char nil stream nil nil)
           collect (read stream))))

示例输入文件- words.txt:

代码语言:javascript
复制
attack attempt attention attraction authority automatic awake 
bright broken brother brown brush bucket building 
comfort committee common company comparison competition

正在读取文件:

代码语言:javascript
复制
> (read-words "words.txt")
=> (ATTACK ATTEMPT ATTENTION ATTRACTION AUTHORITY AUTOMATIC AWAKE BRIGHT BROKEN BROTHER BROWN BRUSH BUCKET BUILDING COMFORT COMMITTEE COMMON COMPANY COMPARISON COMPETITION)

可以通过将符号括在竖线(|)中或将其声明为字符串来保留大小写:

代码语言:javascript
复制
|attack| "attempt" ...

阅读时不失大小写:

代码语言:javascript
复制
> (read-words "words.txt")
=> (|attack| "attempt" ...)
票数 5
EN

Stack Overflow用户

发布于 2010-11-08 21:26:20

如果单词是每行一个,你可以这样做:

代码语言:javascript
复制
(defun file-words (file)
  (with-open-file (stream file)
    (loop for word = (read-line stream nil)
          while word collect word)))

然后你可以像这样使用它;

代码语言:javascript
复制
(file-words "/usr/share/dict/words")
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4120973

复制
相关文章

相似问题

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