Добрый день всем.
string test(List<int> lst )
{
foreach (int x in lst)
if (x == 7) return "Yes";
return "No";
}
вроде все просто, но почему то на немерле код усложняется.
test(lst)
{
mutable i= "No";
foreach( x in lst)
when (x ==7 ) {i="Yes"; break; }
i;
}
Как по другому?
Здравствуйте, kaa_t, Вы писали:
_>Как по другому?
В Nemerle примерно так:
test(lst: List<int>): string
{
if (lst.Any(_ == 7)) "Yes" else "No"
}
в C# аналогично с точностью до синтаксиса:
string test(List<int> lst)
{
return lst.Any(x => x == 7) ? "Yes" : "No"
}
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, kaa_t, Вы писали:
_>>Как по другому?
J>В Nemerle примерно так:
А если так:
string test(List<int> lst )
{
foreach (int x in lst)
if (x % 7 ) return MakeStr(x);
return "No";
}
Здравствуйте, kaa_t, Вы писали:
_>вроде все просто, но почему то на немерле код усложняется.
Потому, что насквозь имеративный код вы пытаетесь записать функционально. Это сложно. Для императивных конструкций есть макросы в пространстве имен Nemerle.Imperative
using Nemerle.Imperative;
using System.Console;
def test(lst)
{
foreach (x in lst)
when (x == 7)
return "Yes";
"No"
}
WriteLine(test([1, 5, 7]));
WriteLine(test([1, 2, 3]));
ReadLine()
в функционально-рекурсивном стиле этот алгоритм записывается так:
using System.Console;
def test(lst)
{
| 7 :: _ => "Yes" // первый элемент 7?
| [] => "No" // список пуст?
| _ :: tail => test(tail) // рекурсивно вызываем функцию со списком без первого элемента
}
WriteLine(test([1, 5, 7]));
WriteLine(test([1, 2, 3]));
ReadLine()
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, kaa_t, Вы писали:
_>>вроде все просто, но почему то на немерле код усложняется.
Z>Потому, что насквозь имеративный код вы пытаетесь записать функционально. Это сложно. Для императивных конструкций есть макросы в пространстве имен Nemerle.Imperative
А можно и без них:
def lookup7(lst)
{
result: {
foreach (x when x == 7 in lst)
result("Yes");
"No"
}
}