ТОМ2: функции: различия между версиями
ASBer (обсуждение | вклад) |
ASBer (обсуждение | вклад) мНет описания правки |
||
| Строка 1: | Строка 1: | ||
{{содержание справа}} |
{{содержание справа}} |
||
==Типы функций== |
|||
'''ТИПЫ ФУНКЦИЙ В ТОМ2''' |
|||
Строка кода (команды) в ТОМе обрабатывается в 2 этапа: |
Строка кода (команды) в ТОМе обрабатывается в 2 этапа: |
||
| Строка 18: | Строка 18: | ||
Разбор команд на естественном языке требует проведение вычислений уже на этапе парсинга, когда смысл строки еще не понятен. Для этого необходимо по разному обрабатывать функции изменяющие и не изменяющие состояние игры. Изменение состояния игры допустимо только после однозначного разбора строки. |
Разбор команд на естественном языке требует проведение вычислений уже на этапе парсинга, когда смысл строки еще не понятен. Для этого необходимо по разному обрабатывать функции изменяющие и не изменяющие состояние игры. Изменение состояния игры допустимо только после однозначного разбора строки. |
||
== Expression (Выражение) == |
=== Expression (Выражение) === |
||
Выражения вычисляются на этапе разбора (парсинга) строки и ''не приводят к изменениям состояния игры''. |
Выражения вычисляются на этапе разбора (парсинга) строки и ''не приводят к изменениям состояния игры''. |
||
| Строка 44: | Строка 44: | ||
} |
} |
||
== Action (Действие) == |
=== Action (Действие) === |
||
??? |
??? |
||
| Строка 70: | Строка 70: | ||
} |
} |
||
== Fact (Факт) == |
=== Fact (Факт) === |
||
Факты применяются в качестве условий или вопросов, а так же как утверждения: |
Факты применяются в качестве условий или вопросов, а так же как утверждения: |
||
Если цвет стен зеленый, то … // условие |
Если цвет стен зеленый, то … // условие |
||
Версия от 10:13, 24 января 2014
Типы функций
Строка кода (команды) в ТОМе обрабатывается в 2 этапа:
- Парсинг
- Выполнение строки
Вычисления и выполнение различных секций функций могут происходить как на 1м, так и на 2м этапах. На этапе парсинга происходит перебор вариантов, поэтому код, участвующий в парсинге, может вызываться множество раз. Выполнение же строки происходит лишь при условии ее однозначного разбора и выполняется только 1 раз.
Любая строка, обработанная без ошибок, всегда возвращает значение, являющееся результатом её выполнения.
В программном языке ТОМ2 есть 3 типа функций:
- Выражения
- Действия
- Факты
Зачем нужно деление функций на три типа:
Разбор команд на естественном языке требует проведение вычислений уже на этапе парсинга, когда смысл строки еще не понятен. Для этого необходимо по разному обрабатывать функции изменяющие и не изменяющие состояние игры. Изменение состояния игры допустимо только после однозначного разбора строки.
Expression (Выражение)
Выражения вычисляются на этапе разбора (парсинга) строки и не приводят к изменениям состояния игры.
Выражения могут входить в состав других сложных выражений, фактов или действий.
В качестве результата возвращается вычисленное значение выражения. Если вся строка является одним выражением, то вычисленное значение будет финальным результатом всей строки.
Примеры выражений:
цвет стен количество людей в комнате некто, взявший 3 рубля 2 + 2 X + 3 X.type
Пример функции выражения:
// атрибуты
expression(attribute Atr, object Ob)
{ == parsing ==
if :Ob.key != :Atr.key then fail, "несогласовано"
Ok
== execute ==
if :Ob.:Atr then return :Ob
fail, "тут такого нет"
}
Action (Действие)
???
Действия изменяют состояние игры.
Действия не могут входить в состав других действий, фактов или выражений, за исключением условных конструкций.
На этапе парсинга определяется необходимое действие и подготавливаются его аргументы.
Выполнение действий происходит после однозначного разбора строки.
Примеры действий:
покрась стены в зелёный цвет возьми 3 рубля run test.txt
Пример функции действия:
action(иди act*Пф, location напр*Ап)
{ == check ==
if loc = напр then fail, "ты уже здесь"
if нельзя_пройти loc :напр then fail, "туда нет прохода"
Ok
== execute ==
goto :напр
}
Fact (Факт)
Факты применяются в качестве условий или вопросов, а так же как утверждения:
Если цвет стен зеленый, то … // условие Цвет стен зеленый? // вопрос Цвет стен зеленый. // утверждение
Факты могут входить в состав логических выражений, а также как условия в состав условных конструкций.
На этапе парсинга строки происходит проверка факта. Результат проверки - всегда логическое значение. Для условий результат проверки влияет на дальнейшее выполнение условной конструкции, для вопросов результат проверки является финальным результатом строки, для утверждений результат не важен.
После однозначного разбора строки с утверждением происходит выполнение этого утверждения (в нашем примере стенам будет присвоен зелёный цвет). Выполнение утверждения изменяет состояние игры.
Примеры фактов:
Цвет стен зеленый в комнате 5 человек X = 3
Пример функции факта:
fact(нельзя_пройти, локация, локация)
{ == check ==
yes //по умолчанию никуда нельзя пройти
}