flammar (flammar) wrote,
flammar
flammar

Полку факториалов прибыло ;-)

Проверенный пример для движка на основе properties-файла, типа тех, что используются java-приложениями.


fact=$($($(fact.arg)$ 0 equals !)$ fact.1 fact1g IF !)$
fact.1=1
fact1g=$( $(fact.arg)$ $( $( $(fact.arg)$ 1 sub !)$ fact.arg fact WITH !)$ mul !)$


factt=$( $(factt.arg)$ facttr.arg 1 facttr.acc facttr WITH !)$
facttr=$( facttr.cond facttr.ret facttr.accf facttr.acc facttr.argf facttr.arg TREC !)$
facttr.cond=$( $(facttr.arg)$ 0 equals !)$
facttr.ret=$(facttr.acc)$
facttr.argf=$( $(facttr.arg)$ 1 sub !)$
facttr.accf=$( $(facttr.acc)$ $(facttr.arg)$ mul !)$


Факториала аж два - fact и factt (tail-рекурсивный).


Движок-расширение "пропертей" сделан поверх BeanShell.

Запускается несколько оригинально:
1) source("D:\\work\\T4L\\UTIL.BSH"); (файл UTIL.BSH пока не открываю;-) )
2.1) n=System.currentTimeMillis();a=resolve(p, "$(1000 factt.arg factt WITH !)$");n-System.currentTimeMillis();
;-)
или
2.2) a=resolve(p, "$(28 fact.arg fact WITH !)$");
значение аргумента больше 28 не берет - переполнение стека

Вниманию юзера slobin: пример в 2.1 выдает следующее:


<1196755416461>

bsh % <402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>

bsh % <-4609>

bsh %

Пусть сравнит с питоновским, должно совпасть ;-)

UPD-7C4:G05 По замечанию юзера slobin проведен перезапуск команды из 2.2 и исправлены непонятки.
Tags: fact, humor, it, lang
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 10 comments