Prolog - 流4上的无效流操作:输入

时间:2017-10-06 10:12:18

标签: prolog

我正在尝试从文件中获取二进制数的程序,将它们转换为十进制并将它们写入另一个文件。转换部分工作正常,但当我尝试将数字写入输出文件时失败。我在Amzi上跑! Prolog,当我尝试执行我的代码时,我收到以下错误:

执行错误434: Prolog - 流4上的无效流操作:输入 调用堆栈(近似值) - read_term / 3 ---栈顶---

这是我正在使用的代码:

append([],L,L). 
   append([H|T],L2,[H|L3])  :-  append(T,L2,L3).

reverse([],[]) .
reverse([X],[X]) .
reverse([X|Xs],R) :-
    reverse(Xs,T) ,
    append(T,[X],R).

/*
Starts Conversion to Binary
*/
to_binary(Bin,Dec):-
    reverse(Bin,BinRev),
    accumulate(BinRev, 0, 0, Dec).

accumulate([],L,_,L).
accumulate([B|L],Acc,Pow,Res):-
    Z is B*(2**Pow),
    NAcc is Acc + Z,
    NPow is Pow+1,
    accumulate(L,NAcc,NPow,Res).

/*Converts number into list of digits*/
numToList(NUM,[LIST|[]]):-
   NUM < 10,
   LIST is NUM,
   !.
numToList(NUM,LIST):-
   P is NUM // 10,
   numToList(P,LIST1),
   END is (NUM mod 10), 
   append(LIST1,[END] ,LIST).

/*FILE READING PART*/
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).


/*PROCESSING PART*/
process([],File).
process([X|Xs],File):-
    numToList(X,List),
    to_binary(List,Dec),
    write(File, Dec),
    process(Xs).

/*MAIN*/
main :-
    open('input.txt', read, Str),
    read_file(Str,Lines),
    close(Str),
    open('output.txt', write, File),
    write(Lines),
    process(Lines,File),
    close(File).

这是我正在使用的文件:

101010.
11111111.
10000.
11010110.
1101.
111101.
10001.
111111.
11.

0 个答案:

没有答案