如何从 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)
备注:
snake_case
不是 Lispy,使用 lisp-case
(a.k.a.kebab case)
sort
改变了它的参数,所以在你的情况下它对输入列表有副作用;您需要改为 (sort (copy-list list) ...)
。
- 您似乎在尝试递归
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))))
我目前正在尝试使用 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)
备注:
snake_case
不是 Lispy,使用lisp-case
(a.k.a.kebab case)sort
改变了它的参数,所以在你的情况下它对输入列表有副作用;您需要改为(sort (copy-list list) ...)
。- 您似乎在尝试递归
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))))