Здравствуйте, VladD2, Вы писали:
FDS>>Я именно их и смотрел (и там, и там). Первым делом. Но создалось впечатление, что они пытаются научить языку по примерам. Я так и не нашёл ничего похожего на спецификаию C#.
VD>Так и есть, но спецификация совершенно не обязательна для изучения языка.
Но лучше бы, если бы была
VD>Вот только можно было бы опустить типы параметров. Все и так очевидно. Так что вот такой код:
VD>VD>using System.Console;
VD>def F2(x)
VD>{
VD> def FC(y) { 2 * y + x }
VD> FC
VD>}
VD>def F1(x) { F2(x)(5) }
VD>WriteLine(F1(100))
VD>
VD>естественно 110.
VD>Смысла он не имеет, но демонстриует одно из важных свойств языка — вычисления над фукнциями.
Я его тут скомпилировал. Прикол в том, что он у меня не работает: выдаёт exception. То ли у меня руки кривые и я его неправильно скомпилил, то ли не знаю что
FDS>>Или, например, я не нашёл ответ на вопрос: могу ли я во время компиляции выделить макросом кусок уже разобранного nemerle кода и выполнить с ним специфические действия (например, проверку на освобождение ресурсов или на диапазон выходных значений по заданным входным и выходным)?
VD>Такие вопросы можно задать на форуме. Если вопрос действительно интересен, то отвечу — можно. Хотя это и не тривиально.
Хм, на самом деле, было бы неплохо, если бы это описывалось в документации. Первое, что мне в голову пришло — это именно анализ дерева.
FDS>> Могу ли я во время компиляции выполнить некоторые операции программы пользователя в штатном режиме (что-то вроде встроенного ЮТ)? [и как мне это сделать и где это описано]
FDS>>Может это и есть где-то, но я не заметил
VD>На такие вопросы ответы в документации найти невозможно в принципе. Но их можно задать на форуме.
Видать, я жуткий бюрократ

. А в каком их форуме задавать?
VD>Видимо потому что нужно как-то так:
VD>VD>macro m(x : int)
VD>{
VD> mutable result = [];
VD> for (mutable i = x - 1; i >= 0; i--)
VD> result ::= <[ System.Console.WriteLine("ss {0}", $(x : int)); ]>;
VD> <[ { ..$result } ]>
VD>}
VD>
VD>1. Макрос обязан вернуть одно выражение. Тут же их много, так что нужно завернуть их в блок. Последняя команда как раз это и делает. В цикле же формируется список выражений которые потом помещаются в блок.
VD>2. Параметр х является целым числом для макроса, а требуется литерал. Тут требется подсказка компилятору, что нужно преобразовать значение из переменной х в литерал. Конечно компилятор мог бы быть и по умнее. Но и так не плохо по сравению с тем что приходится вытворять в подобных случаях при других способах генерации кода.
Спасибо (вы ответили сразу на три моих вопроса), но не вечно же у вас спрашивать, кода проблемы появляются

, а со спецификацией я бы сам разобрался
FDS>>Локальные функции круче
Хотя теперь не придётся создавать массивы.
VD>Незнаю причем тут массивы, но я бы поставил паттерн-матчинг выше по значимости. Кслати, его очень удобно исползовать в тех самых локальных фукнциях.
Когда мне надо сопоставлять с образцом, я запихиваю образцы в массив (вместе с указателями на функции) и в цикле проверяю.
VD>>>2. Локальные функции.
...
VD>В Дельфи как локальные функции и на ёту не приближаются к этим. Эти являются замыканиями и могут использовать весе что объявлено перед ними.
В Delphi функции то же могут использовать всё, что объявлено перед ними (исключая переменные других локальных функций)
VD>>>4. Вывод типов.
...
VD>Это и дает. Лишнего в коде нет. Код становится короче и стало быть понятнее. Если нужно изнать тип чего-то, то просто подвидишь мышьку в IDE и смотришь хинт.
Ага, а если нет интергации с MS VS (1. не могу скачать последнюю версию непомню уже чего, 2. нефига не понимаю и т.п., в общем у меня не работает даже "простая" интеграция с VS, точнее работает, но на половину

)
VD>>>8. Частичное применение функций и операторов.
VD>>>9. Сплайсебл-строки.
FDS>>Не нашёл ни 9, ни 8. Может дадите ссылку на конкретный документ?
VD>Все описано в статьеАвтор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
. Сделай поиск по статье на $" (бакс и ковычка) и почитай что там написано. Частичному применению посвящен отдельный раздел Частичное применение и другие операции над функциями и операторамиАвтор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
.
Ужас. Прочитал. Вообще, я очень невнимательно читал статьи и документацию, виноват. Спасибо