Здравствуйте, Аноним, Вы писали:
А>1. Макросы нельзя использовать рекурсивно?
Не очень понятен вопрос. Как вы себе это представляете? Использовать макрос в квазицитатах в тоже сборке где он объявлен нельзя. Обычно делается рекурсивный разбор макроса.
А>2. есть ли аналог функции А>function (const a:int) и А>function (mutable a:int) А>function (a:int)
Этот вопрос понять не получилось вообще
Re[2]: Набор вопросов
От:
Аноним
Дата:
28.04.11 06:05
Оценка:
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, Аноним, Вы писали:
А>>1. Макросы нельзя использовать рекурсивно?
Z>Не очень понятен вопрос. Как вы себе это представляете? Использовать макрос в квазицитатах в тоже сборке где он объявлен нельзя. Обычно делается рекурсивный разбор макроса.
а я несколько дней пытался понять этот факт.... думал разбор идет рекурсивно (тогда бы было реально использовать макросы вместо функций (функция стала бы частным случаем макроса))
А>>2. есть ли аналог функции А>>function (const a:int) и А>>function (mutable a:int) А>>function (a:int)
Z>Этот вопрос понять не получилось вообще
могу ли я создать функцию которая будет принимать только константный параметр.
например ttt(1+1) верно
mutable x=1;
ttt(x) ошибка
Здравствуйте, Аноним, Вы писали:
А>1. Макросы нельзя использовать рекурсивно?
Можно. Только их нужно использовать в функциональной форме записи. Но как правило это не требуется, так как если макрос получил управление, то он в силах раскрыть код с новыми входными данными.
А>2. есть ли аналог функции А>function (const a:int) и А>function (mutable a:int) А>function (a:int)
Все параметры функций по-умолчанию иммутабельны. Чтобы сделать параметр мутабельным нужно добавить модификатор mutable к имени параметры либо ref/out к типу.
Здравствуйте, Аноним, Вы писали:
Z>>Этот вопрос понять не получилось вообще
А>могу ли я создать функцию которая будет принимать только константный параметр. А>например ttt(1+1) верно А>mutable x=1; А>ttt(x) ошибка
Понятия константности эквивалентного C++ у нас нет. Его нормальная реализация потребует переписывания чуть менее чем всего FCL.
Здравствуйте, Аноним, Вы писали:
А>1. Макросы нельзя использовать рекурсивно?
Это сложный вопрос. Смотря что считать рекурсией.
Например, в стандартной библиотеке некоторые макросы написаны рекурсивно. Но это как бы рекурсия на прошлую версию макросов, так что это не совсем рекурсия.
Кроме того сами макросы — это просто немерле-код. А он, конечно же поддерживает рекурсию. Так что если задача просто рекурсивно исполнять код макросов, то это решается выносом кода макроса в отдельную функцию и ее рекурсивным вызовом.
В общем, чтобы ответить на этот вопрос нужно понять что хочет Аноним.
А>2. есть ли аналог функции А>function (const a:int) и А>function (mutable a:int) А>function (a:int)
1 и 3 — это одно и то же. Собственно все есть. Параметр по умолчанию неизменяемый. Чтобы он изменялся нужно добавить ключевое слово mutable.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Аноним, Вы писали:
А>а я несколько дней пытался понять этот факт.... думал разбор идет рекурсивно (тогда бы было реально использовать макросы вместо функций (функция стала бы частным случаем макроса))
Это какая-то философия.
А>>>2. есть ли аналог функции А>>>function (const a:int) и А>>>function (mutable a:int) А>>>function (a:int)
Z>>Этот вопрос понять не получилось вообще А>могу ли я создать функцию которая будет принимать только константный параметр. А>например ttt(1+1) верно А>mutable x=1; А>ttt(x) ошибка
Хм. У Вас странное понимание неизменяемости. Параметр копируется. По крайней мере если это вэлью-тип. По сему нет никакого смысла ограничивать передачу изменяемой переменной в функцию имеющую неизменяемый параметр.
Если нужно добиться передачи именно константных выражений, то этого можно достичь с использованием макросов. Но какой в этом смысл?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
А>>могу ли я создать функцию которая будет принимать только константный параметр. А>>например ttt(1+1) верно А>>mutable x=1; А>>ttt(x) ошибка
H>Понятия константности эквивалентного C++ у нас нет. Его нормальная реализация потребует переписывания чуть менее чем всего FCL.
Сдается мне, что в С++ в функцию принимающую константный параметр без проблем можно передать неконстантный int. Это же копирование!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Аноним, Вы писали:
А>1. Макросы нельзя использовать рекурсивно? А>2. есть ли аналог функции А>function (const a:int) и А>function (mutable a:int) А>function (a:int)
Имеет смысл описать свои задачи.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.