抱歉可能有错误,我不是母语人士
嗨!我的任务听起来是这样的:
我们有一个文件,其组成部分是实数。在屏幕上显示偶数分量的最高值
创建程序时,需要使用标准的Prolog谓词:处理文件的谓词、数据输入和输出、字符处理和计时、程序管理谓词。
必须使用适当的目标部分来实施请求。
这是我的代码:
% Predicate for finding the largest value among even-numbered components
find_max_even_component(File, Max) :-
open(File, read, Stream),
read_numbers(Stream, Numbers), % Call the predicate to read data from the file
close(Stream), % Closing the file
find_max_even_component(Numbers, Max). % Call the internal predicate
% Internal predicate for finding the maximum value
find_max_even_component([X], X).
find_max_even_component([X, Y | Rest], Max) :-
X >= Y,
find_max_even_component([X | Rest], Max).
find_max_even_component([X, Y | Rest], Max) :-
X < Y,
find_max_even_component([Y | Rest], Max).
% Predicate for reading data from a file
read_numbers(Stream, []) :- at_end_of_stream(Stream), !.
read_numbers(Stream, [X | Rest]) :-
\+ at_end_of_stream(Stream), % Until the end of the file is reached
read(Stream, X), % Read a number from a file
read_numbers(Stream, Rest). % Read other numbers recursively
goal :- find_max_even_component('test.txt', Max),
write('The highest value among even-numbered components: '), write(Max), nl.
test.txt 看起来像:
1 2 3 4 5
它位于与 test.pl 相同的文件夹中
然后,我尝试在 SWI-Prolog 中运行我的程序,如下所示:
?- consult("test.pl").
true.
?- goal.
之后,我收到错误:
ERROR: C:\Users\Admin\Desktop\test\test.txt:1:11: Syntax error: Unexpected end of file
我尝试用
make.
清除之前的定义并重新启动程序,但没有帮助。可能是什么错误?
UPD 我更改了 test.txt,现在它看起来像这样: 1. 2. 3. 4. 5.
所以现在我在使用
?- goal.
后出现了新的错误:
ERROR: source_sink `[1,2,3,4,5]' does not exist (No such file or directory)
ERROR: In:
ERROR: [13] open([1,2|...],read,_166)
ERROR: [12] find_max_even_component([1,2|...],_204) at /Users/lidarachynska/Documents/lab2-rach-folder/test.pl:5
ERROR: [10] goal at /Users/lidarachynska/Documents/lab2-rach-folder/test.pl:26
ERROR: [9] toplevel_call(user:user:goal) at /Applications/SWI-Prolog.app/Contents/swipl/boot/toplevel.pl:1173
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
Exception: (12) find_max_even_component([1, 2, 3, 4, 5], _42) ?
您的内部程序与您的公共程序具有完全相同的名称和数量 (
find_max_even_component/2
)。
您需要将内部过程的名称更改为其他名称,例如
find_max_item/2
。