我正在尝试从文件中获取二进制数的程序,将它们转换为十进制并将它们写入另一个文件。转换部分工作正常,但当我尝试将数字写入输出文件时失败。我在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.