Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, VladD2, Вы писали:
VD>>
VD> public IsEmpty[T](this seq : SCG.IEnumerable[T]) : bool
VD> {
VD> | [] => true
VD> | _ :: _ => false
VD> | ary is array[T] => IsEmpty(ary)
VD> | col is System.Collections.ICollection => IsEmpty(col)
VD> | null => true
VD> | _ =>
VD> foreach (_ in seq) // This for call IDisposable...
VD> Nemerle.Imperative.Return(false);
VD> true
VD> }
VD>}
VD>
а это зачем?
Здравствуйте, Константин Л., Вы писали:
КЛ>VD> foreach (_ in seq) // This for call IDisposable...
VD>> Nemerle.Imperative.Return(false);
VD>> true
КЛ>а это зачем?
Интерфейс System.Collections.Generic.IEnumerator[T] унаследован от System.IDisposable и какой-нибудь оригинал может расчитывать на то, что в конце итерации будет вызван Dispose(). Чтобы не напрягаться и не прописывать вызов явно я воспользовался foreach-чем который хотя и макрос, но отрабатывает эту логику как и встроенный оператор foreach в C#.
Ну, а Nemerle.Imperative.Return(false) — это такой способ вызвать макрос return (заменяющий оператор return из Шарпа). В данном случае я зада полностью квалифицированное имя и у меня не будет проблем если я этот код скопирую в модуль где не открыто пространство имен Nemerle.Imperative. В принципе, можно заменить этот код на:
foreach (_ in seq) // This for call IDisposable...
return false;
true
но перед этим прийдется открыть (using-ом) пространство имен Nemerle.Imperative.
По умолчанию return, break и contunue не доступны, чтобы люди приучались писать в фукнциональном стиле и допускли меньше ошибок. Чтобы их использовать открыть Nemerle.Imperative.
В приципе этот код можно было бы записать на блоках:
return:
{
foreach (_ in seq) // This for call IDisposable...
return(false);
true
}
... << RSDN@Home 1.2.0 alpha rev. 637>>
Здравствуйте, IO, Вы писали:
IO>Здравствуйте, mkizub, Вы писали:
M>>И было-бы неплохо, чтоб find возвращал не все возможные решения, а по одному. А то если все сразу — это на практике будет очень долго.
IO>Мне тоже интересно, можно ли тут прикрутить ленивое вычисление.
Попробуйте FilterLazy из Nemerle.Utility
... << RSDN@Home 1.2.0 alpha rev. 677>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll