Как реализовать break в функциональном языке

Привет, мне интересно, что является «лучшим» способом реализации прерывания и продолжения на языке, где операторы циклов, например. while и for, а также операторы if на самом деле являются функциями. Поэтому я думаю, что break может вызвать исключение, подобное Ruby, но функция while поймает его автоматически и остановит цикл.

пример:

i = 0
while true, do
            i +
            if i > 10, break
end

Блок do..end является параметром while, а также break является параметром кода if.

пс. извините за язык :/


person Viola    schedule 26.11.2015    source источник
comment
как насчет return??   -  person Giuseppe Pes    schedule 26.11.2015
comment
работает? если если блок функции eval где есть пауза, то как while может знать, что есть пауза? Или если return-оператор находится в if, так что прерывается только оценка if-функции?   -  person Viola    schedule 26.11.2015


Ответы (1)


Если у вас есть размеченные объединения (или аналогичная функция, например наследование ООП), вы можете использовать это: выражение do может возвращать не только обычное возвращаемое значение, но и специальные значения для break и continue.

Или, используя синтаксис ML (где 'a — тип выражения):

type 'a expression_result = Break | Continue | Return of 'a

Если выражение ничего не возвращает, вы можете использовать тип unit как 'a.

person svick    schedule 26.11.2015