Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 06:19
Оценка: :)
 // 'Identity' is a lambda that accepts an argument of any type and
 // returns the value of its parameter.  
auto Identity = [](auto a) { return a; };
int three = Identity(3);
char const* hello = Identity("hello");


это с++
Re: Возможно ли такое сделать в немерли?
От: hardcase Пират http://nemerle.org
Дата: 07.05.13 06:25
Оценка:
Здравствуйте, Аноним, Вы писали:

Это даже на C# можно сделать:

static class Foo
{
  public T Identity<T>(T x) { return x; }
}
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 06:31
Оценка: :))
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


H>Это даже на C# можно сделать:


H>
H>static class Foo
H>{
H>  public T Identity<T>(T x) { return x; }
H>}
H>


сравним размер кода с++ и С#
можно и на паскале тогда сделать перечисли просто все типы
Re: Возможно ли такое сделать в немерли?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 07.05.13 08:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А> // 'Identity' is a lambda that accepts an argument of any type and
А> // returns the value of its parameter.  
А>auto Identity = [](auto a) { return a; };
А>int three = Identity(3);
А>char const* hello = Identity("hello");
А>


А>это с++


def Identity[T](a) { a }
def three = Identity(3);
def hello = Identity("hello");


это Немерле
Ce n'est que pour vous dire ce que je vous dis.
Re: Возможно ли такое сделать в немерли?
От: _NN_ www.nemerleweb.com
Дата: 07.05.13 08:53
Оценка:
Здравствуйте, Аноним, Вы писали:

Не подскажете какой компилятор С++ 11 это дело умеет компилировать ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 09:28
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Аноним, Вы писали:


_NN>Не подскажете какой компилятор С++ 11 это дело умеет компилировать ?


gcc 4.8
Re[2]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 09:39
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Здравствуйте, Аноним, Вы писали:


А>>
А>> // 'Identity' is a lambda that accepts an argument of any type and
А>> // returns the value of its parameter.  
А>>auto Identity = [](auto a) { return a; };
А>>int three = Identity(3);
А>>char const* hello = Identity("hello");
А>>


А>>это с++


DR>
DR>def Identity[T](a) { a }
DR>def three = Identity(3);
DR>def hello = Identity("hello");
DR>


DR>это Немерле


  Main() : void
  {
  def Identity[T](a) { a }
def three = Identity(3);
def hello = Identity("hello");

      WriteLine($"$three $hello");
    _ = ReadLine();
  }


программа компилируется без ошибок(последний стабильный релиз), но поле выдается сообщение во время построения произошли ошибки.
Re[3]: Возможно ли такое сделать в немерли?
От: _NN_ www.nemerleweb.com
Дата: 07.05.13 09:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, _NN_, Вы писали:


_NN>>Здравствуйте, Аноним, Вы писали:


_NN>>Не подскажете какой компилятор С++ 11 это дело умеет компилировать ?


А>gcc 4.8


Поддержка auto в параметрах еще на стадии предложения: Generic (Polymorphic) Lambda Expressions (Revision 3)
Это значит, что это не часть С++11.
Из этого следует g++ 4.8 с флагом --std=c++11 не будет компилировать ваш код:

g++ --version

g++ (rev2, Built by MinGW-builds project) 4.8.0
Copyright (C) 2013 Free Software Foundation, Inc.

g++ --std=c++11 a.cpp

a.cpp: In function 'int main()':
a.cpp:2:17: error: parameter declared 'auto'
  auto x=[](auto a){return a;};
                 ^
a.cpp: In lambda function:
a.cpp:2:27: error: 'a' was not declared in this scope
  auto x=[](auto a){return a;};

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 09:53
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Из этого следует g++ 4.8 с флагом --std=c++11 не будет компилировать ваш код:


_NN>
_NN>g++ --version

_NN>g++ (rev2, Built by MinGW-builds project) 4.8.0
_NN>Copyright (C) 2013 Free Software Foundation, Inc.
_NN>

_NN>
_NN>g++ --std=c++11 a.cpp

_NN>a.cpp: In function 'int main()':
_NN>a.cpp:2:17: error: parameter declared 'auto'
_NN>  auto x=[](auto a){return a;};
_NN>                 ^
_NN>a.cpp: In lambda function:
_NN>a.cpp:2:27: error: 'a' was not declared in this scope
_NN>  auto x=[](auto a){return a;};
_NN>

_NN>

попробуй флаг C++1y
Re[2]: Возможно ли такое сделать в немерли?
От: STDray http://stdray.livejournal.com
Дата: 07.05.13 10:33
Оценка: +1
DR>
DR>def Identity[T](a) { a }
DR>def three = Identity(3);
DR>def hello = Identity("hello");
DR>


DR>это Немерле


Только надо указать тип аргумента для Indentity
def Identity[T](a : T) { a }

иначе типизатор object для a выведет.
Re[3]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 10:43
Оценка:
Здравствуйте, STDray, Вы писали:

DR>>
DR>>def Identity[T](a) { a }
DR>>def three = Identity(3);
DR>>def hello = Identity("hello");
DR>>


DR>>это Немерле


STD>Только надо указать тип аргумента для Indentity

STD>
def Identity[T](a : T) { a }

STD>иначе типизатор object для a выведет.
работает
спасибо
Re[5]: Возможно ли такое сделать в немерли?
От: _NN_ www.nemerleweb.com
Дата: 07.05.13 13:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>попробуй флаг C++1y


Я к тому что это еще не совсем стандартизировано и всегда может успеть поменяться, а в C#/Nemerle это работает сейчас и меняться не будет точно.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Возможно ли такое сделать в немерли?
От: _NN_ www.nemerleweb.com
Дата: 07.05.13 15:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А какая цель была этого сравнения ?
Не хотите признавать возможности Nemerle ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 07.05.13 17:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, STDray, Вы писали:


DR>>>
DR>>>def Identity[T](a) { a }
DR>>>def three = Identity(3);
DR>>>def hello = Identity("hello");
DR>>>


DR>>>это Немерле


STD>>Только надо указать тип аргумента для Indentity

STD>>
def Identity[T](a : T) { a }

STD>>иначе типизатор object для a выведет.
А>работает
А>спасибо
а так не пашет
def Identity[T](a : T,b : T):T { a+b }
def three = Identity(3,1);
def hello = Identity(3.1,2);
Re[5]: Возможно ли такое сделать в немерли?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 07.05.13 17:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а так не пашет

А> def Identity[T](a : T,b : T):T { a+b }

Для того, чтобы это реализовать требуется способ указать, что тип T обязан поддерживать оператор сложения. В .NET нет такой возможности.

http://stackoverflow.com/questions/3598341/define-a-generic-that-implements-the-operator
Ce n'est que pour vous dire ce que je vous dis.
Re[5]: Возможно ли такое сделать в немерли?
От: hardcase Пират http://nemerle.org
Дата: 07.05.13 18:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а так не пашет

А> def Identity[T](a : T,b : T):T { a+b }
А>def three = Identity(3,1);
А>def hello = Identity(3.1,2);

Можно сделать макру
macro Identity(a, b)
{
  <[ $a + $b ]>
}

Бесполезно, зато работать будет.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 16.05.13 19:46
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Аноним, Вы писали:


А>>а так не пашет

А>> def Identity[T](a : T,b : T):T { a+b }
А>>def three = Identity(3,1);
А>>def hello = Identity(3.1,2);

H>Можно сделать макру

H>
H>macro Identity(a, b)
H>{
H>  <[ $a + $b ]>
H>}
H>

H>Бесполезно, зато работать будет.

не работает... вылетает по исчерпанию памяти
Re[7]: Возможно ли такое сделать в немерли?
От: _NN_ www.nemerleweb.com
Дата: 16.05.13 20:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>не работает... вылетает по исчерпанию памяти

Все работает.
Полный код:

a.n
namespace A
{
  macro Identity(a, b)
  {
    <[ $a + $b ]>
  }
}


b.n
using A;

def three = Identity(3,1);
def hello = Identity(3.1,2);

System.Console.WriteLine(hello);


ncc a.n -t dll -r Nemerle.Compiler.dll -o a.dll
ncc b.n -t exe -r a.dll -o b.exe

b.exe
5.1
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[8]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 16.05.13 20:06
Оценка:
Здравствуйте, _NN_!
Нужна писать так "пруф или работаит!1111!!1"
Re[9]: Возможно ли такое сделать в немерли?
От: _NN_ www.nemerleweb.com
Дата: 16.05.13 20:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, _NN_!

А>Нужна писать так "пруф или работаит!1111!!1"

Чего вы хотите ?
Если не верите, скачайте билд с http://tc.rsdn.ru и убедитесь сами.
Если пришли потроллить — до свидания.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.