查找文件中最大的偶数分量值

问题描述 投票:0回答:1

抱歉可能有错误,我不是母语人士

嗨!我的任务听起来是这样的:

我们有一个文件,其组成部分是实数。在屏幕上显示偶数分量的最高值

  • 创建程序时,需要使用标准的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) ?
prolog swi-prolog
1个回答
0
投票

您的内部程序与您的公共程序具有完全相同的名称和数量 (

find_max_even_component/2
)。

您需要将内部过程的名称更改为其他名称,例如

find_max_item/2

© www.soinside.com 2019 - 2024. All rights reserved.