Есть ли подходящий пример для объяснения вызова по результату? (не псевдокод)Вызов по результату Пример
Я узнал, что АЛГОЛ 68, Ада мог использовать этот способ,
, но я не могу найти четкого примера вызова по результату.
Есть ли подходящий пример для объяснения вызова по результату? (не псевдокод)Вызов по результату Пример
Я узнал, что АЛГОЛ 68, Ада мог использовать этот способ,
, но я не могу найти четкого примера вызова по результату.
Я только что сделал сам.
псевдокод
begin
integer n;
procedure p(k: integer);
begin
n := n+1;
k := k+4;
print(n);
end;
n := 0;
p(n);
print(n);
end;
Реализовать с помощью языке Ада
call.adb
with Gnat.Io; use Gnat.Io;
procedure call is
x : Integer;
Procedure NonSense (A: in out integer) is
begin
x := x + 1;
A := A + 4;
Put(x);
end NonSense;
begin
x := 0;
NonSense (x);
Put(" ");
Put(x);
New_Line;
end call;
Так как Ada использует вызов по пути результата, результат должен быть 1 4. (Это можно проверить, введя этот код в онлайн-компилятор Ada «http://www.tutorialspoint.com/compile_ada_online.php»)
И другой результат применяются различные типы передачи параметров должны быть ...
вызова по значению: 1 1
вызова по ссылке: 5 5
(сравнить> Вызов по значению-результату: 1 4)
Помните, что методы передачи параметров в Ada зависят от типа. Целые типы передаются копией, в то время как (например) тегированные типы передаются по ссылке. Для некоторых типов выбор зависит от реализации компилятора. –
В идеале компилятор Ada отказывается от компиляции этого кода на том основании, что это ошибка, ожидающая появления. –
Возможный намек в LRM, 6.2: «Если объект имеет тип, для которого механизм передачи параметров не указан и не является явно псевдонимом, то это ограниченная ошибка для назначения объекту через один доступ путь, а затем прочитать значение объекта через отдельный путь доступа ». Если вам нужны указатели, используйте указатели. Лучше, однако, забыть о прохождении механизмов в пользу IN, IN OUT и OUT при написании Ada. – B98
Насколько я могу видеть в Ada, термин «позывной» почти никогда не используется, гораздо проще думать о режимах передачи параметров - то есть сказать, что вы хотите, а не о том, как вы хотите бывает. В частности, найдите любой код, который использует параметры 'OUT', (не' IN OUT', который будет соответствовать результату call-by-value). –
Что означает «вызов по результату»? Это метод передачи параметров? –
[Этот ответ] (http://stackoverflow.com/a/3004067/40851) объясняет 'in out', что, как говорит @BrianDrummond, соответствует результату call-by-value. Вероятно, вы можете вывести из него пошаговый результат (т. Е. Ада 'out'). –