Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 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
Re[10]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 17.05.13 06:33
Оценка:
Здравствуйте, _NN_, Вы писали:

Не работает так реальный пример с множественной вложенностью типов.

примерно так выглядит

mul(a,b) -> return (a.x*b.x-a.y*b.y.............)

причем конечный тип есть A[A[A[A[A[A[A[A[A[A[A[double]]]]]]]]]]]
разворот всего дает слишком много кода
Re[11]: Возможно ли такое сделать в немерли?
От: hardcase Пират http://nemerle.org
Дата: 17.05.13 07:22
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>Не работает так реальный пример с множественной вложенностью типов.


Ничего не понял в сообщении. Попробуйте донести мысль полнее.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[12]: Возможно ли такое сделать в немерли?
От: Аноним  
Дата: 17.05.13 14:55
Оценка:
Здравствуйте, hardcase, Вы писали:

А>>Не работает так реальный пример с множественной вложенностью типов.


H>Ничего не понял в сообщении. Попробуйте донести мысль полнее.


kvar[T]
{
  x,y,z,t:T;
}

macro mul(a,b:T){T(a.x*b.x+a.y*b.y+a.z*b.z-a.t*b.t,.....,.....,.....)}


в коде создаеться
kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[double]]]]]]]]]]
макрос разворачивается в кучу кода
Re[13]: Возможно ли такое сделать в немерли?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 17.05.13 15:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>kvar[T]

А>{
А>x,y,z,t:T;
А>}

А>macro mul(a,b:T){T(a.x*b.x+a.y*b.y+a.z*b.z-a.t*b.t,.....,.....,.....)}


А>в коде создаеться

А>kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[kvar[double]]]]]]]]]]
А>макрос разворачивается в кучу кода

> macro mul(a,b:T)


И это компилируется? Вообще, в "macro mul(a,b)", a и b имеют тип PExpr.

using Nemerle.Compiler;
using Nemerle.Compiler.Parsetree;

macro cross(t, u, v)
{
    <[
        def u = $u;
        def v = $v;
        $t
            ( u.y * v.z - u.z * v.y
            , u.z * v.x - u.x * v.z
            , u.x * v.y - u.y * v.x
            )
    ]>
}

[ Record ]
class V3
{
    public x : double;
    public y : double;
    public z : double;

    public override ToString() : string
    {
        $"[$x $y $z]"
    }
}

System.Console.WriteLine(cross(V3, V3(1,2,3), V3(4,5,6)));

[-3 6 -3]


ILSpy:
// Test
public static void Main()
{
    V3 v = new V3((double)1, (double)2, (double)3);
    V3 v2 = new V3((double)4, (double)5, (double)6);
    Console.WriteLine(new V3(v.y * v2.z - v.z * v2.y, v.z * v2.x - v.x * v2.z, v.x * v2.y - v.y * v2.x));
}
Ce n'est que pour vous dire ce que je vous dis.
Re[2]: Возможно ли такое сделать в немерли?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.13 23:12
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>А какая цель была этого сравнения ?


Какой-то школьник пришел пенисом помериться, а вы перед ним распинаетесь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Возможно ли такое сделать в немерли?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.13 23:18
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не работает так реальный пример с множественной вложенностью типов.


Какие типы? Перед вынесением суждений нужно в предмете разобраться. Это макрос. Он с типами не работает.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Возможно ли такое сделать в немерли?
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 17.05.13 23:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Какой-то школьник пришел пенисом помериться, а вы перед ним распинаетесь.


Может, автору темы это и не важно, зато кто другой прочитает и узнает что-то новое.
Ce n'est que pour vous dire ce que je vous dis.
Re[4]: Возможно ли такое сделать в немерли?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.13 23:53
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Может, автору темы это и не важно, зато кто другой прочитает и узнает что-то новое.


Тогда лучше было в какой-нибудь интересный пример ткнуть или в статью.

Что можно узнать из пенесометрии?

Сам понимаешь, чтобы оценить Немерл, нужно хотя бы поверхностно вникнуть в его концепции.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.