История изменений
Исправление monk, (текущая версия) :
Почему цикл/первый, а не цикл?
Потому что выполняется только один цикл при условии. У тебя после условия break.
Что это за приставка у #:когда?
#:
? Обозначает, что это не имя функции или переменной, а имя аргумента конструкции цикл
. Эквивалент в питоне — именованные аргументы.
Усложним пример:
Здесь два варианта. Один: переписать под традиции лиспов. Будет так:
calc-bonus(tau wordLen hints) =
tau := tau - wordLen // 4
условия
;
hints > 4; 0
tau > 30; 0
иначе
bonus = - hints
points = #((2 5) (7 3) (15 2) (30 1))
цикл/первый (p points; #:когда tau < p[0])
bonus := bonus + p[1]
макс 0 bonus
Второй: указать, что есть досрочный выход из блока:
calc-bonus(tau wordLen hints) =
с-выходом возврат
когда (hints > 4)
возврат 0
tau := tau - wordLen // 4
когда (tau > 4)
возврат 0
bonus = - hints
points = #((2 5) (7 3) (15 2) (30 1))
цикл/первый (p points; #:когда tau < p[0])
bonus := bonus + p[1]
макс 0 bonus
Исходная версия monk, :
Почему цикл/первый, а не цикл?
Потому что выполняется только один цикл при условии. У тебя после условия break.
Что это за приставка у #:когда?
#:'? Обозначает, что это не имя функции или переменной, а имя аргумента конструкции
цикл`. Эквивалент в питоне — именованные аргументы.
Усложним пример:
Здесь два варианта. Один: переписать под традиции лиспов. Будет так:
calc-bonus(tau wordLen hints) =
tau := tau - wordLen // 4
условия
;
hints > 4; 0
tau > 30; 0
иначе
bonus = - hints
points = #((2 5) (7 3) (15 2) (30 1))
цикл/первый (p points; #:когда tau < p[0])
bonus := bonus + p[1]
макс 0 bonus
Второй: указать, что есть досрочный выход из блока:
calc-bonus(tau wordLen hints) =
с-выходом возврат
когда (hints > 4)
возврат 0
tau := tau - wordLen // 4
когда (tau > 4)
возврат 0
bonus = - hints
points = #((2 5) (7 3) (15 2) (30 1))
цикл/первый (p points; #:когда tau < p[0])
bonus := bonus + p[1]
макс 0 bonus