t27.aiEnglish

Программа - это шаги по порядку

Вы узнаете

Программа - это список мелких шагов, выполняемых по порядку, и порядок входит в смысл программы.

Программа - это список мелких шагов, которые компьютер выполняет один за другим. Возьмите число 2. Прибавьте 3, потом удвойте: получится 10. Удвойте, потом прибавьте 3: получится 7. Те же два шага в другом порядке дают другой ответ, поэтому, описывая программу агенту, вы описываете и порядок. Цикл - это один шаг, записанный один раз и повторённый: прибавить 3 четыре раза, начиная с 2, даёт 14. Когда результат вас удивил, прочтите шаги по порядку и найдите самый ранний, который делает не то, что вы имели в виду.

Попробуйте

Найдите в спеке три программы: add_then_double, double_then_add и add_three_n_times. Поменяйте LOOP_RESULT с 14 на 11 и запустите: a_loop_is_one_step_repeated падает, потому что 11 - это три шага, а не четыре. Верните 14 на место.

Открыть интерактивный урок →

Vibecoding 2: a program is steps in order ↗

The same two steps, add 3 and double, in two orders give two answers, and a loop repeats one step. Lesson 2 of the vibecoding course.

specs/vibecoding/steps_in_order.t27

// SPDX-License-Identifier: Apache-2.0
; Vibecoding lesson 2: a program is steps in order.
; The same two steps in another order give another answer, and a loop repeats one step.

module vc_steps_in_order;

; add 3, then double
pub fn add_then_double(x: u16) -> u16 {
    return (x + 3) * 2;
}

; double, then add 3
pub fn double_then_add(x: u16) -> u16 {
    return x * 2 + 3;
}

; one step, repeated: add 3, n times
pub fn add_three_n_times(start: u16, n: u8) -> u16 {
    var s : u16 = start;
    for i in 0..n {
        s = s + 3;
    }
    return s;
}

pub const START : u16 = 2;
pub const TIMES : u8 = 4;

; What each program printed when it ran with START.
pub const ADD_FIRST : u16 = 10;
pub const DOUBLE_FIRST : u16 = 7;
pub const LOOP_RESULT : u16 = 14;

test add_first_then_double {
    assert ADD_FIRST == (START + 3) * 2;
}

test double_first_then_add {
    assert DOUBLE_FIRST == START * 2 + 3;
}

test the_order_changes_the_answer {
    assert ADD_FIRST != DOUBLE_FIRST;
}

test a_loop_is_one_step_repeated {
    assert LOOP_RESULT == START + 3 * 4;
    assert LOOP_RESULT == START + 3 + 3 + 3 + 3;
}

Открыть спеку урока в плеере ↗

Все уроки