"Klaus" == Klaus Alexander Seistrup <spam@magnetic-ink.dk> writes:
> Kent Friis skrev:
>>> echo
>'[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439\
> snlbxq'|dc
>>
>> Den forklarer du lige?
> Se dc(1).
`info dc' er nok bedre.
Men det er slet ikke så svært:
"[q]" -> Put strengen q på stakken
"sa" -> Pop q af stakken, og gem i register a
"[ln0=aln256%Pln256/snlbx]" -> Put strengen "ln0=aln256%Pln256/snlbx"[*]
på stakken
"sb" -> Og hele molevitten i register b.
"3135071790101768542287578439sn" -> Tallet
3135071790101768542287578439 i
register n.
"lb" -> Kopier register b til stakken.
"x" -> Udfør toppen af stakken som en makro.
"q" -> Afslut.
* Og mon ikke vi lige skulle dekode register b lidt mere:
"ln0=aln256%Pln256/snlbx":
"ln" -> Tallet 3135071790101768542287578439 lægges på toppen af
stakken.
"0" -> 0 oveni stakken.
"=a" -> Udfør register a som makro, hvis de to værdier fra toppen af
stakken er ens. Det er ikke tilfældet her.
"ln" -> Har vi set før.
"256" -> Vi lægger 256 på toppen af stakken.
"%" -> Pop to værdier, beregn restværdi af division, og push den
værdi.
"P" -> Pop den øverste værdi af stakken, og udskriv den i base 256.
"ln" -> Har vi set før.
"256" -> Vi lægger 256 på toppen af stakken.
"/" -> Pop 2 værdier, divider og push resultatet.
"sn" -> Gem toppen af stakken i register n.
"lb" -> Kopier register b til stakken.
"x" -> Udfør[*] toppen af stakken som en makro.
I korte træk sker der altså det at tallet
3135071790101768542287578439 gentagne gange bliver divideret med 256,
og for hver division udskrives resten i base 256. Når vi ender med et
0 udføres register a som en makro, og da værdien af register a er `q',
afsluttes dc meget bekvemt.
Restværdierne ved de enkelte divisioner er:
71, 69, 84, 32, 65, 32, 76, 73, 70, 69, 33, 10
Omsætningen til base 256 er triviel, og overlades derfor til læseren.
--
/Wegge <
http://outside.bakkelygaard.dk/~wegge/>