]]> ]]>

Факториал в Factor

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

В первой строке перечисляются необходимые библиотеки: formatting (printf), kernel (dup), math (арифметические действия) и sequences (iota). Во второй строке объявляется имя текущего словаря — это необходимо для определения новых слов.

Затем определяется слово factorial, которое заменяет на стеке целое число n на его факториал. Для этого оно строит массив чисел от 0 до n — 1 с помощью слова iota и сворачивает его с единицей цитатой [ 1 + * ] (прибавление 1 и перемножение двух чисел) и комбинатором reduce.

Слово main генерирует массив чисел от 0 до 16 и комбинатором each применяет к ним цитату, которая вычисляет факториалы чисел и выводит их на печать.

В стандартном словаре math.combinatorics присутствует слово factorial, определенное указанным в примере образом.

USING: formatting kernel math sequences ;
IN: factorial-example

: factorial ( n -- n! )
    iota 1 [ 1 + * ] reduce ;

17 iota
[ dup factorial "%d! = %d\n" printf ] each

Комментарии

]]>

blog comments powered by Disqus

]]>

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