Цикл - повторение одного и того же кода несколько раз. Для реализации цикла в cine используется два оператора - for и parse.
Оператор for
for имеет три варианта:
Оператор for
for имеет три варианта:
for выражение 1; выражение 2; выражение 3 код
Алгоритм работы такого варианта следующий:- выполняется выражение 1
- выполняется выражение 2 и если оно возвращает true, то выполняется код принадлежащий for, иначе for завершает свою работу
- выполняется выражение 3
- ход выполнения возвращается к пункту 2 (так происходит до тех пор пока выражение 2 не вернет false)
Выражения 1 и 3 не должны возвращать значения, а так же в них можно присваивать значения перемеренным.
В выражении 1 можно создать новую переменную или константу, которая будет существовать только во время работы for.
Выражение 2 должно возвращать значение типа Bool.
Любое из 3 выражений не является обязательным, если отсутствует выражение 2, то считается что оно возвращает true.
Код не является обязательным.for выражение код
Алгоритм работы такой же как и у варианта 1, но отсутствуют выражения 1 и 3, а так же нет разделителей ";".for код
Алгоритм работы такой же как и у варианта 2, но отсутствует выражение. Считается, что это выражение всегда возвращает true. Как выйти из такого цикла будет рассказано в следующей статье.
parse используется для разбора по частям каких либо данных (например разбор строки по символу). Синтаксис parse:
parse константа 1, константа 2 <- выражение
код
По принципу работы parse схож со следующей конструкцией:
константа 3 .= выражение
for переменная := parse_first(константа 3); parse_haveItem?(константа 3, переменная); parse_next(константа 3, переменная)
константа 1 .= parse_key(константа 3, переменная)
константа 2 .= parse_item(константа 3, переменная)
код
но есть отличия:
- константа 3 на самом деле не создаётся
- переменная не получает имени и к ней никак нельзя обратиться
- вместо имен констант 1 или 2 можно указать знак подчёркивания, это будет означать что константу не нужно создавать
- если в качестве выражения для parse была передана переменная, то её значения во время работы parse нельзя менять
//удаляет пробелы и табуляции в начале строки
//заменяет последовательности из пробелов и табуляций на один пробел
func trim(string)
rules
final = string == [UInt8]
result = [UInt8]
result = ""
for index := 0; index < string.getLength(); index++
//в начале переменная index будет равна 0 (index := 0)
//каждое повторение index будет увеличиваться на 1 (index++)
//цикл продолжается до тех пор, пока index меньше длинны строки
if char := string[index]; char == ' ' || char == '\t'
then
startIndex .= index
for index++; index < string.getLength(); index++
if char = string[index]; char != ' ' && char != '\t'
then
index--
break //о break подробней в следующей статье
if index < string.getLength() && startIndex != 0
then result += ' '
else result += char
//удаляет пробелы и табуляции
func removeSpaces(string)
rules
final = string == [UInt8]
result = [UInt8]
result = ""
parse _, char <- string
//при разборе слайса, первая константа - индекс элемента
//а вторая - элемент
//в данном случае нам не нужен индекс, поэтому мы указали символ _
if char != ' ' && char != '\t'
then result += char
proc main()
" \tHello \t user ! !!! ! ".trim().printLn()
" \tHello \t user ! !!! ! ".removeSpaces().printLn()
В результате работы программы на экран выведется следующие 2 строки:
Hello user ! !!! !
Hellouser!!!!!
Комментариев нет:
Отправить комментарий
Пожалуйста без мата и оскорблений. Если хотите сообщить об ошибках, для этого есть форма обратной связи.