LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Суть не в том что код делает, а в том можно ли его выразить на языке X.

Если вообще ничего непонятно, вот простой пример рекурсивного типа без использования замыканий. auto в С++ должен сам выводить подходящий тип, в C# для этого есть var, но он вроде не для функций.

auto f()
{
  return f;
}

void main()
{
  f()()()()()()();
}

Как видно по ОП-посту, многие языки не могут повторить это, потому что тип будет рекурсивен.

Даже С++ не может это скомпилировать, не знаю какую там магию надо применить, но с лямбдами работает:

void main()
{
  auto f = [](this auto self) 
  {
    return self;
  };

  f()()()()()()();
}

Исправление MOPKOBKA, :

Суть не в том что код делает, а в том можно ли его выразить на языке X.

Если вообще ничего непонятно, вот простой пример рекурсивного типа без использования замыканий. auto в С++ должен сам выводить подходящий тип, в C# для этого есть var, но он вроде не для функций.

auto f()
{
  return f;
}

void main()
{
  f()()()()()()();
}

Как видно по ОП-посту, многие языки не могут повторить это, потому что тип будет рекурсивен.

Даже С++ не может это скомпилировать, не знаю какую там магию надо применить, но с лямбдами работает:

void main()
{
  auto f = [](this auto self) {
    return self;
  };

  f()()()()()()();
}

Исправление MOPKOBKA, :

Суть не в том что код делает, а в том можно ли его выразить на языке X.

Если вообще ничего непонятно, вот простой пример рекурсивного типа без использования замыканий. auto в С++ должен сам выводить подходящий тип, в C# для этого есть var, но он вроде не для функций.

auto f()
{
  return f;
}

void main()
{
  f()()()()()()();
}

Как видно по ОП-посту, многие языки не могут повторить это, потому что тип будет рекурсивен.

Даже С++ не может это скомпилировать, не знаю какую там магию надо применить, но с лямбдами работает:

int main()
{
    auto f = [](this auto self) {
        return self;
    };

    f()()()()()()();
}

Исправление MOPKOBKA, :

Суть не в том что код делает, а в том можно ли его выразить на языке X.

Если вообще ничего непонятно, вот простой пример рекурсивного типа без использования замыканий. auto в С++ должен сам выводить подходящий тип, в C# для этого есть var, но он вроде не для функций.

auto f()
{
  return f;
}

void main()
{
  f()()()()()()();
}

Как видно по ОП-посту, многие языки не могут повторить это, потому что тип будет рекурсивен.

Исходная версия MOPKOBKA, :

Суть не в том что код делает, а в том можно ли его выразить на языке X.

Если вообще ничего непонятно, вот простой пример рекурсивного типа без использования замыканий. auto в С++ должен сам выводить подходящий тип, в C# для этого есть var, но он вроде не для функций.

auto f()
{
  return f;
}

void main()
{
  f()()()()()()();
}

Как видно по ОП-посту, многие языки не могут повторить это, потому что тип будет рекурсивен.