Я пишу небольшой интерпретатор для C-подобного языка на схеме (R5RS) и пытаюсь преобразовать что-то вроде:для/продолжить в схеме/сюсюкать
for (i = 0; i < 100; i++)
{
if (isprime(i)) continue;
else /* do something with i */
}
актуального Scheme (функция IsPrime является просто пример и не важно).
Однако после некоторого времени я не смог найти эффективный/простой способ добавить эквивалент оператора continue в цикл do в Схеме. Что еще лучше было бы для макроса «для», который позволяет использовать «продолжить» и «разбить».
Я рассматриваю возможность перехода на Common Lisp. Будет ли это проще в CL?
Я предположил, что это будет вызов/cc (который отлично работает для разрыва), но почему это выполняет приращение, когда вы продолжаете? Кроме того, я предполагаю, что это довольно неэффективно, так как оно обязательно должно быть продолжено на каждой итерации цикла. – Bill
'Continue' в основном просто пропускает остальную часть тела цикла, что и делает моя конструкция. Скачок не мешает самому циклу, поэтому приращение произойдет потом. У меня нет данных об эффективности, хотя ваше предположение может быть правильным. Просто попробуйте. – Dario
Ах, конечно. Ты прав! – Bill