]]> ]]>

Квадратное уравнение в APL

Пример для версий Dyalog APL 13.1

В этом примере определяется именованная D-функция, которая принимает коэффициенты уравнения как один параметр — массив из трех элементов и выводит решение уравнения. Вначале параметр разбирается на отдельные коэффициенты, и им присваиваются имена (N⊃⍵ выбирает N-ый элемент массива). Затем выполняются проверки первого коэффициента и дискриминанта, по которым функция может вернуть нетипичное решение. Наконец, оба случая ненулевого дискриминанта обрабатываются одним и тем же кодом благодаря тому, что в APL есть встроенные комплексные числа. Например, вызов функции

solve 1 0 2

возвращает следующие значения:

0J1.4142135623730951 0J¯1.4142135623730951

(J — разделитель действительной и мнимой частей числа, ¯ — “высокий” минус, использующийся для ввода/вывода отрицательных чисел).

Отметим, что данный код является нетипичным для APL из-за использования условного ветвления, а также из-за того, что механизм использования аргумента ограничивает диапазон его возможных значений до одномерного массива из трех элементов.

solve←{A0⊃⍵  B1⊃⍵  C2⊃⍵  A=0:'Not a quadratic equation.'  D(B*2)-4×A×C  D=0:-0.5×B÷A  ((-B-D*0.5), -B+D*0.5)×0.5÷A}

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам