0

我是普通 lisp 的新手,我想做一些(也许是高级文件阅读)

所以假设我有example1.txt、example2.txt和example3.txt。

example1.txt 有以下内容:

1940 年 10 月 9 日出生

1980 年 12 月 8 日逝世(40 岁)

约翰·温斯顿·小野·列侬,MBE(生于约翰·温斯顿·列侬;1940 年 10 月 9 日 - 1980 年 12 月 8 日)是一位英国音乐家、歌手和词曲作者,作为披头士乐队的创始成员而享誉全球

所以我想做的是:

系统提示我输入名称,我输入列侬。

如果文件包含单词 lennon,继续阅读,否则阅读 example2,我不知道如何在 LISP、C++ 或 perl 中使用缓冲区,这对我来说很容易,也不会问这个问题,但我必须用 lisp 来做。我也想返回元素的索引,例如,如果我输入“音乐家”,我希望它继续阅读,而不是从 0 开始。

根据这本书,我可能需要一个名为的函数READ-SEQUENCE是真的吗?以及如何使用它?顺便说一句,我在 Windows 上并使用 LispWorks。

4

1 回答 1

3
(defun find-word-in-file (word file)
  (with-open-file (stream file)
    (loop
       :for line := (read-line stream nil nil)
       :for found := (and line (search word line))
       :until (or (not line) found)
       :summing (length line) :into position
       :finally (return (when found (+ position found))))))

(find-word-in-file "Lennon" "./example.txt")

;; 79

我想这样的事情会做。

于 2013-11-10T14:07:16.157 回答