Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 在读取时将X插入排序列表中的正确位置_Prolog_Insertion Sort - Fatal编程技术网

Prolog 在读取时将X插入排序列表中的正确位置

Prolog 在读取时将X插入排序列表中的正确位置,prolog,insertion-sort,Prolog,Insertion Sort,我尝试了很多思考如何在阅读时在排序列表中添加值,但我没有弄明白 我必须逐行读取文件中的值,并将它们添加到排序列表中的正确位置 SWI-PROLOG 如果我有input.txt: 1. 4. 2. 3. 8. 六, 我必须读清单1中的1。 读取4-->我的列表是14。 阅读2--->我的列表是1 2 4。。等等 读取和插入函数: main :-open('input.txt', read, Str),read_file(Str,Lines),close(Str),write(Lines), nl.

我尝试了很多思考如何在阅读时在排序列表中添加值,但我没有弄明白

我必须逐行读取文件中的值,并将它们添加到排序列表中的正确位置

SWI-PROLOG

如果我有input.txt: 1. 4. 2. 3. 8. 六,

我必须读清单1中的1。 读取4-->我的列表是14。 阅读2--->我的列表是1 2 4。。等等

读取和插入函数:

main :-open('input.txt', read, Str),read_file(Str,Lines),close(Str),write(Lines), nl.

read_file(Stream,[]) :-at_end_of_stream(Stream).

read_file(Stream,[X|L]) :-\+ at_end_of_stream(Stream),read(Stream,X),read_file(Stream,L).

insert(X,[Y|Sorted],[Y|Sorted1]):-X>Y,!,insert(X,Sorted,Sorted1).
insert(X,Sorted,[X|Sorted]).

我试图让函数读取(Stream,X)并将X传递给insert(X,[],[]),或者将函数列表参数放入read_文件(并且确保未定义)。从逻辑上讲,第一步是可以的,但我不知道如何进入下一步。没有主意。

首先,您需要修改
读取文件
以获取输入和输出。然后,您需要修改此条款:

read_file(Stream,[X|L]) :-\+ at_end_of_stream(Stream),read(Stream,X),read_file(Stream,L).
调用
插入
,而不预先添加项目本身。您可以这样做:

read_file(Stream, Before, Result) :-
  \+ at_end_of_stream(Stream),
  read(Stream, X),
  insert(X, Before, After),
  read_file(Stream, After, Result).
我会这样写

read_file(Stream, SoFar, Result) :-
    read(Stream, X),
    (   X == end_of_file
    ->  Result = SoFar
    ;   insert(X, SoFar, Updated),
        read_file(Stream, Updated, Result)
    ).
最初必须使用空列表调用:

?- read_file(user, [], L).
|: 4.
|: 5.
|: 1.
|: 7.
|: 2.
|: L = [1, 2, 4, 5, 7].
在2之后,我输入了^D(在我的系统上结束文件)