LINUX.ORG.RU

История изменений

Исправление 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