Факториал в Factor
В первой строке перечисляются необходимые библиотеки: 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
]]>