Fractran: Difference between revisions

Content added Content deleted
m (Updated description and link for Fōrmulæ solution)
(Added Quackery.)
Line 3,327: Line 3,327:
Generated prime 43 from the 117832'th member of the fractran series
Generated prime 43 from the 117832'th member of the fractran series
Generated prime 47 from the 152026'th member of the fractran series</pre>
Generated prime 47 from the 152026'th member of the fractran series</pre>

=={{header|Quackery}}==

<code>run</code> performs the first step of executing a Fractran program, returning a rational number (represented as two stack items: numerator and denominator) and a boolean. The boolean is <code>true</code> if the halting condition is satisfied, and <code>false</code> otherwise.

In this task the parsed Fractran program is stored on the ancillary stack <code>program</code>.

To execute a Fractran program until the halting condition is satisfied, use <code>[ program share run until ]</code>. The Fractran prime generator will never satisfy the halting condition, so in this task the <code>drop</code> after <code>run</code> discards the boolean.

<lang Quackery> [ 1 & not ] is even ( n --> b )
[ nip 1 = ] is vint ( n --> b )
[ [ dup even while
1 >> again ]
1 = ] is powerof2 ( n --> b )
[ 0 swap
[ dup even while
dip 1+
1 >> again ]
drop ] is lowbit ( n --> n )
[ [] swap nest$
witheach
[ char / over find
space unrot poke
quackery join
nested join ] ] is parse$ ( $ --> [ )
[ stack ] is program ( s --> )
[ true temp put
witheach
[ do 2over v*
2dup vint iff
[ false temp replace
conclude ]
else 2drop ]
2swap 2drop
temp take ] is run ( n/d [ --> n/d b )
[ stack ] is primes ( --> s )
$ "17/91 78/85 19/51 23/38 29/33 77/29 95/23"
$ " 77/19 1/17 11/13 13/11 15/14 15/2 55/1" join
parse$ program put
2 n->v
15 times
[ program share run
drop over echo sp ]
cr
2drop
2 n->v
[] primes put
[ program share run
drop over dup powerof2 iff
[ lowbit primes take
swap join primes put ]
else drop
primes share size 20 = until ]
2drop
primes take echo
program release</lang>

{{out}}

<pre>
15 825 725 1925 2275 425 390 330 290 770 910 170 156 132 116
[ 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 ]
</pre>


=={{header|Racket}}==
=={{header|Racket}}==