Факториал в 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
]]>