问题描述
(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
(又名 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))))