如何从 LISP 中的文件中删除行?

How to remove line from file in LISP?

我目前正在尝试使用 LISP 从文件中删除行。

(defun remove_line_from_file (file line_number)
    
)

(defun remove_lines_from_file (file lines)
    (if (not (null lines))
        (progn
            (remove_line_from_file (file (car (sort lines #'>))))
            (remove_lines_from_file (file (cdr (sort lines #'>))))
        )
    )
)

我不知道我该怎么做。我做的是递归。

调用示例:

(remove_lines_from_file "file_name" (2 3 5 6))

如何从文件中删除指定行?

(remove_line_from_file "file_name" 2)

备注:

  1. snake_case 不是 Lispy,使用 lisp-case (a.k.a.kebab case)
  2. sort 改变了它的参数,所以在你的情况下它对输入列表有副作用;您需要改为 (sort (copy-list list) ...)
  3. 您似乎在尝试递归 lines,这看起来效率很低;你可能想遍历文件一次

您需要打开文件进行读取,在递增行计数器的同时遍历所有行,并复制每一行(例如,写入标准输出),除非行号是要删除的行之一:

(defun remove-lines (file lines-to-remove)
  (with-open-file (in file)
    (loop
      for line-number from 1
      for line = (read-line in nil nil)
      while line
      unless (member line-number lines-to-remove)
        do (write-line line))))