Horner's Rule

function horners_polyeval(a::Vector{T}, x::S) where {T<:Real, S<:Real}
    px = a[end]
    for k in (length(a)-1):-1:1
        px = a[k] + px * x
    end
    return px
end