0

私は Common Lisp の初心者です。いくつかやりたいことがあります (おそらく高度なファイル読み取り)。

example1.txt、example2.txt、example3.txt があるとしましょう。

example1.txt には次のものがあります。

1940年10月9日生まれ

1980年12月8日死去(40歳)

ジョン・ウィンストン・オノ・レノン、MBE (ジョン・ウィンストン・レノン生まれ、1940 年 10 月 9 日 – 1980 年 12 月 8 日) は、英国のミュージシャン、シンガー、ソングライターであり、ビートルズの創設メンバーとして世界的に有名になりました。

だから私がやりたいことは:

名前を入力するように求められたら、Lennon と入力します。

ファイルに 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 に答える