]]> ]]>

Факториал в Factor

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

В этом примере используется чисто рекурсивное вычисление факториала. Слово factorial заменяет на стеке n на n! с побочным эффектом: выводом всех значений факториалов от 0 до n. После выполнения комбинатора if на стеке остаются значения n и n!, которые словами swap и over заменяются на n!, n, n!; два последних значения используются при выводе, первое остается на стеке в качестве возвращенного.

В основной части программы main приходится добавить drop значения 16!, чтобы сигнатура программы оставалась ( -- ).

USING: formatting kernel math ;
IN: factorial-example

: factorial ( n -- n! )
    dup
    0 =
    [ 1 ]
    [ dup dup 1 - factorial * ]
    if
    swap over "%d! = %d\n" printf ;

16 factorial
drop

Комментарии

]]>

blog comments powered by Disqus

]]>

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