Pari/GP: пользовательские функции
Я определил пару функций Arity 1, скажем, func1(-)
а также func2(-)
, Я проверил их и увидел, что они действительно делают то, что должны.
Я хочу определить третью функцию, скажем func3(-)
, что выводит разницу func1(-)
а также func2(-)
, Вот что я делаю
func3(k) = {j=func1(k)-func2(k); print(j)}
Тем не менее, он не возвращает то, что должен. Давайте предположим, что func1(5)
выходы 10 и func2(5)
выходы 2. Затем func3(5)
должен вывести 8, верно? Вместо этого он возвращает вывод func1(5)
в одном ряду вывод func2(2)
в другой строке, а затем ноль (хотя разница соответствующих выходов не равна 0).
Вы знаете, что не так с определением func3(-)
?
1 ответ
Пользовательская функция GP возвращает последнее оцененное значение. Здесь это результат команды print(j), которая печатает j (побочный эффект) и возвращает void, который имеет тип 0, когда ему нужно дать значение, как здесь.
f1(x) = 10
f2(x) = 2
f3(x) = f1(x) - f2(x)
правильно возвращает 8. Вы не дали код для своих функций func1 / func2, но я ожидаю, что вы включили оператор 'print', возможно, ожидая, что он вернет значение. Вот почему вы получаете выходные данные в разных строках, до 0.
Если вам не нравится это поведение return-last-valuation-result, вы можете использовать явные операторы return (result).