Anonymous user
Continued fraction/Arithmetic/Construct from rational number: Difference between revisions
Continued fraction/Arithmetic/Construct from rational number (view source)
Revision as of 15:38, 5 January 2018
, 6 years ago→{{header|Julia}}
Line 721:
=={{header|Julia}}==
{{works with|Julia|0.6}}
<lang Julia># It's most appropriate to define a Julia iterable object for this task▼
# Julia doesn't have Python's yield, the closest to it is produce/consume calls with Julia tasks▼
# but for various reasons they don't work out for this task
# This solution works with two integers, a Julia rational or a real
mutable struct ContinuedFraction{T<:Integer}
n1::
n2::
t1::
end
#
ContinuedFraction{T<:Integer}(n1::T, n2::T) = ContinuedFraction(n1, n2, 0)
ContinuedFraction(n::Rational) = ContinuedFraction(numerator(n), denominator(n))
ContinuedFraction(n::AbstractFloat) = ContinuedFraction(Rational(n))
#
Base.start(::
Base.done(cf::ContinuedFraction, st) = cf.n2 == 0
#
function Base.next(cf::
cf.n1, (cf.t1, cf.n2) = cf.n2, divrem(cf.n1, cf.n2)
▲return (cf.t1,nothing)
end
▲# returns true if we've prepared the continued fraction
#
▲# tell Julia that this object always returns ints (all coeffs are integers)
▲Base.eltype(::Type{R2cf})=Int
▲# overload the default collect function so that we can collect the first maxiter coeffs of infinite continued fractions
# array slicing doesn't work as Julia crashes before the slicing due to our infinitely long array
function Base.collect(itr::
r = Array{eltype(itr)}(maxiter)
i = 1
for v
r[i] = v
i += 1
if i
end
return r[1:i-1]
end
#
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
println(collect(
=={{header|Kotlin}}==
|