]]> ]]>

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

Пример для версий Factor 0.94

Слово quadratic-equation принимает на вход коэффициенты квадратного уравнения и выводит результаты его решения на печать, ничего не возвращая. Обратим внимание на то, что это слово определено не через токен :, как обычные слова, а через :: — это означает, что в нем будут использоваться именованные переменные с лексической областью видимости, в данном случае именованные параметры a, b и c и локальные переменные d, x0 и sd (определенные оператором :>). Такие переменные можно загружать на стек по их имени. Слова для работы с именованными переменными доступны в словаре locals.

В Factor есть встроенный тип данных для комплексных чисел; если дискриминант отрицателен, корень из него sd автоматически примет тип complex. В этом случае для вывода корней на печать используются слова real-part и imaginary-part, извлекающие действительную и мнимую части комплексного числа, соответственно.

readln читает строку из потока ввода, а string>number (словарь math.parser) преобразует строку в действительное число.

USING: formatting io kernel locals math math.functions math.parser ;
IN: quadratic-example

:: quadratic-equation ( a b c -- )
    a 0 =
    [ "Not a quadratic equation." printf ]
    [ b sq a c * 4 * - :> d 
      b neg a 2 * / :> x0
      d sqrt a 2 * / :> sd
      d 0 =
      [ x0 "x = %f\n" printf ]
      [ d 0 >
        [ x0 sd + x0 sd - "x1 = %f\nx2 = %f\n" printf ]
        [ x0 sd + [ real-part ] [ imaginary-part ] bi "x1 = (%f, %f)\n" printf
          x0 sd - [ real-part ] [ imaginary-part ] bi "x2 = (%f, %f)\n" printf ]
        if
      ]
      if
    ]
    if ;

readln string>number
readln string>number
readln string>number
quadratic-equation

Комментарии

]]>

blog comments powered by Disqus

]]>

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