Fractran: Difference between revisions

25 bytes removed ,  11 months ago
m
(Add APL)
Line 2,719:
=={{header|Julia}}==
{{works with|Julia|1.9}}<syntaxhighlight lang="julia">
# FRACTRAN interpreter implemented as an Iteratoriterable struct
 
using .Iterators: filter, map, take
import Base: iterate, show
 
struct Fractran
progrs::Vector{Rational{BigInt}}
inputi₀::BigInt
end
 
function Base.iterate(f::Fractran, i = f.inputi₀) =
for fracr in f.progrs
if iszero(i % fracr.den)
next = i *= frac.numi ÷ fracr.den * r.num
return (nexti, nexti)
end
end
end
 
function run(f::Fractran) = map(trailing_zeros, filter(ispow2, f))
Iterators.map(trailing_zeros, Iterators.filter(ispow2, f))
end
 
function Base.show(io::IO, f::Fractran) = join(io, take(run(f), 30), ' ')
join(io, Iterators.take(run(f), 30), ' ')
end
 
macro code_str(s)
39

edits