JL Julia  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Структуры и неизменяемые типы

Проверяет базовое понимание темы «Структуры и неизменяемые типы»: чтение фрагментов, выбор корректной конструкции и объяснение результата без опоры на угадывание. Вопросы требуют читать код, находить границу применимости, выбирать проверяемую правку и отличать свойства Julia от поведения конкретного пакета. В тесте 20 вопросов: 12 заданий с кодом и 8 заданий с математической записью. Все формулировки рассчитаны на Julia 1.12.6; для сторонних библиотек используется явно названный API.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 55 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 20
Что именно следует из фрагмента с `struct Report`?
s=(x_1:T_1,\ldots,x_n:T_n)
JuliaJulia · Неизменяемые структуры struct
struct Report
    values::Vector{Float64}
    name::String
end
r = Report([1.0, 2.0], "day")
push!(r.values, 3.0)
@show r
Вопрос 2 из 20
Какой контрольный тест лучше всего проверит правило, связанное с `struct Report`?
JuliaJulia · Неизменяемые структуры struct
struct Report
    values::Vector{Float64}
    name::String
end
r = Report([1.0, 2.0], "day")
push!(r.values, 3.0)
@show r
Вопрос 3 из 20
Какой контракт следует закрепить при переработке строки `struct Report`?
JuliaJulia · Неизменяемые структуры struct
struct Report
    values::Vector{Float64}
    name::String
end
r = Report([1.0, 2.0], "day")
push!(r.values, 3.0)
@show r
Вопрос 4 из 20
Какой результат приёмочного теста подтвердит корректность участка с `struct Report`?
s=(x_1:T_1,\ldots,x_n:T_n)
Вопрос 5 из 20
Что следует сообщить пользователю библиотеки о поведении `struct Report`?
Вопрос 6 из 20
Что именно следует из фрагмента с `mutable struct Counter`?
s_t\to s_{t+1}
JuliaJulia · Изменяемые структуры mutable struct
mutable struct Counter
    value::Int
    limit::Int
end
function bump!(c::Counter)
    c.value < c.limit || return false
    c.value += 1
    return true
end
@show bump!(Counter(0, 1))
Вопрос 7 из 20
Какой тест точнее всего зафиксирует границу поведения `mutable struct Counter`?
JuliaJulia · Изменяемые структуры mutable struct
mutable struct Counter
    value::Int
    limit::Int
end
function bump!(c::Counter)
    c.value < c.limit || return false
    c.value += 1
    return true
end
@show bump!(Counter(0, 1))
Вопрос 8 из 20
Какую гарантию должна сохранить правка участка с `mutable struct Counter`?
JuliaJulia · Изменяемые структуры mutable struct
mutable struct Counter
    value::Int
    limit::Int
end
function bump!(c::Counter)
    c.value < c.limit || return false
    c.value += 1
    return true
end
@show bump!(Counter(0, 1))
Вопрос 9 из 20
Какой результат приёмочного теста подтвердит корректность участка с `mutable struct Counter`?
s_t\to s_{t+1}
Вопрос 10 из 20
Что следует сообщить пользователю библиотеки о поведении `mutable struct Counter`?
Вопрос 11 из 20
Что именно следует из фрагмента с `new(float(lo), float(hi))`?
x\in\mathcal{D}\Rightarrow\operatorname{new}(x)\in\mathcal{I}
JuliaJulia · Конструкторы
struct Interval
    lo::Float64
    hi::Float64
    function Interval(lo, hi)
        lo <= hi || throw(ArgumentError("lo > hi"))
        new(float(lo), float(hi))
    end
end
@show Interval(1, 3)
Вопрос 12 из 20
Что нужно подтвердить отдельным примером для `new(float(lo), float(hi))`?
JuliaJulia · Конструкторы
struct Interval
    lo::Float64
    hi::Float64
    function Interval(lo, hi)
        lo <= hi || throw(ArgumentError("lo > hi"))
        new(float(lo), float(hi))
    end
end
@show Interval(1, 3)
Вопрос 13 из 20
Какой контракт следует закрепить при переработке строки `new(float(lo), float(hi))`?
JuliaJulia · Конструкторы
struct Interval
    lo::Float64
    hi::Float64
    function Interval(lo, hi)
        lo <= hi || throw(ArgumentError("lo > hi"))
        new(float(lo), float(hi))
    end
end
@show Interval(1, 3)
Вопрос 14 из 20
Как проверить, что новая реализация `new(float(lo), float(hi))` не изменила обещанное пользователю поведение?
x\in\mathcal{D}\Rightarrow\operatorname{new}(x)\in\mathcal{I}
Вопрос 15 из 20
Какое утверждение о `new(float(lo), float(hi))` является переносимым правилом, а не особенностью одного запуска?
Вопрос 16 из 20
Какое утверждение точнее всего объясняет участок с `0 <= n <= available(a) || throw(ArgumentError("reserve"))`?
\forall t:\;I(s_t)=\mathrm{true}
JuliaJulia · Инварианты
mutable struct Account
    balance::Int
    reserved::Int
end
available(a) = a.balance - a.reserved
function reserve!(a, n)
    0 <= n <= available(a) || throw(ArgumentError("reserve"))
    a.reserved += n
end
Вопрос 17 из 20
Что нужно подтвердить отдельным примером для `0 <= n <= available(a) || throw(ArgumentError("reserve"))`?
JuliaJulia · Инварианты
mutable struct Account
    balance::Int
    reserved::Int
end
available(a) = a.balance - a.reserved
function reserve!(a, n)
    0 <= n <= available(a) || throw(ArgumentError("reserve"))
    a.reserved += n
end
Вопрос 18 из 20
Какое решение устраняет риск вокруг `0 <= n <= available(a) || throw(ArgumentError("reserve"))`, не меняя поведение на допустимых данных?
JuliaJulia · Инварианты
mutable struct Account
    balance::Int
    reserved::Int
end
available(a) = a.balance - a.reserved
function reserve!(a, n)
    0 <= n <= available(a) || throw(ArgumentError("reserve"))
    a.reserved += n
end
Вопрос 19 из 20
Какой результат приёмочного теста подтвердит корректность участка с `0 <= n <= available(a) || throw(ArgumentError("reserve"))`?
\forall t:\;I(s_t)=\mathrm{true}
Вопрос 20 из 20
Как сформулировать границу механизма `0 <= n <= available(a) || throw(ArgumentError("reserve"))` без чрезмерного обещания?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу