我是普通lisp的新手,我想做一些(可能是高级文件阅读)
所以假设我有example1.txt,example2.txt和example3.txt。
example1.txt包含以下内容:
1940年10月9日出生
1980年12月8日逝世(40岁)
John Winston Ono Lennon,MBE(出生于John Winston Lennon; 1940年10月9日 - 1980年12月8日)是一位英国音乐家,歌手和词曲作者 作为甲壳虫乐队的创始成员,它在世界范围内声名鹊起
所以我想做的是:
我被提示输入名字,我输入了Lennon。
如果文件包含单词lennon,继续阅读,否则读取example2,我不知道如何在LISP中使用缓冲区,在C ++或perl中,这对我来说很容易,也不会有问题这个问题,但我必须在口齿不清。我想要返回元素的索引,例如,如果我键入“musician”,我希望它继续阅读,而不是从0开始。
根据this book我可能需要一个名为READ-SEQUENCE
的函数是真的吗?以及如何使用它?顺便说一句,我在Windows上并使用LispWorks。
答案 0 :(得分:2)
(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
我猜这样的事情会发生。