作为输入数据,我有一个包含 100 行的文件。在每一行上,我都有一个数字,后跟一个点。我需要将排序后的数字越来越多地打印到另一个文件中。
我知道从文件中读取并使用 see and tell 打印到文件中,但是当涉及从 1 到 100 的所有文件时,无需对 see 中的每一行执行 read(X)、read(Y) 等() 我搞不清楚了。那么你将如何解决这个问题呢?
作为输入数据,我有一个包含 100 行的文件。在每一行上,我都有一个数字,后跟一个点。我需要将排序后的数字越来越多地打印到另一个文件中。
我知道从文件中读取并使用 see and tell 打印到文件中,但是当涉及从 1 到 100 的所有文件时,无需对 see 中的每一行执行 read(X)、read(Y) 等() 我搞不清楚了。那么你将如何解决这个问题呢?
请注意,此描述比所需的实际代码要详细得多。
?- read_input(L), msort(L, S), write_output(S).
即(使用爱丁堡风格的 I/O)查看输入文件,继续阅读,存储在列表中直到输入 = end_of_file
(然后关闭列表),然后使用msort对列表进行排序,然后告诉输出文件,然后用循环写入列表的每个元素。您可以使用 length/2 检查是否真的有 100 个数字。
编辑未经测试的代码以从当前输入中读取列表
read_list(L) :-
read(N), N \= end_of_file
-> L = [N|Ns], !, read_list(Ns)
; L = []
.