Какое значение должно быть написано для правильного выполнения кода? - PullRequest
1 голос
/ 21 апреля 2019

Какое значение должно быть написано для правильного выполнения кода.Я даю любую сумму, которую я не вижу на выходе.

f(T, Y) :-Y is sqrt(abs(T)) + 5*T^3.

main :-
    read(As),
    length(As, N), reverse(As , Rs),
    ( foreach(Ai , Rs), for(I, N - 1, 0,  -1) do
        Bi is f(Ai),
            ( Bi > 400  ->  printf("%w TOO  LARGE\n", I)
                ;
                printf("%w %w\n", [I, Bi])
            )
    ).

1 Ответ

1 голос
/ 21 апреля 2019

Ваша программа работает нормально. Может быть, вы забыли завершить ввод данных точкой / периодом?

[eclipse 2]: main.                     % Invoke 'main' from the ECLiPSe prompt.
 [3,7,5,2].                            % Input the list, terminate with fullstop.

производит этот вывод

3 41.4142135623731
2 TOO  LARGE
1 TOO  LARGE
0 136.732050807569

Yes (0.00s cpu)

Помните, что если вы используете один из примитивов, которые читают термины в синтаксисе Пролога (read / 1,2, read_term / 1,2 и т. Д.), Каждый термин должен заканчиваться точкой полного останова (хотя ECLiPSe также принимает end-end из-файл).

Кстати, вместо использования read / 1 вы обычно просто передаёте данные в качестве аргумента. Если вы измените свой код таким способом, вы можете просто вызвать main([3,7,5,2]).

...