Здравствуйте, Flem1234, Вы писали:
F>Пока я писал этот вариант, злой модератор сбросил всю ветку про прострелить ногу в мусор
F>здесь
Нифига это не смешно, да еще и код коряво написан. Вот како надо простреливать ноги и другие части тела на Nemerle:
using System.Console;
[assembly: Nemerle.Internal.OperatorAttribute ("Nemerle.Shooting", "голову", true, 281, 280)]
[assembly: Nemerle.Internal.OperatorAttribute ("Nemerle.Shooting", "руку", true, 281, 280)]
[assembly: Nemerle.Internal.OperatorAttribute ("Nemerle.Shooting", "ногу", true, 281, 280)]
namespace Nemerle.Shooting
{
macro @голову(_)
{
<[ ]>
}
macro @руку(_)
{
<[ ]>
}
macro @ногу(_)
{
<[ ]>
}
macro shoot(кому_и_что) syntax("прострелить", кому_и_что)
{
def str = match(кому_и_что)
{
| <[ $что(Flem1234) ]> => $"С радостью прострелю $что Flem1234!"
| <[ голову(себе) ]> => "Самоубийство противоречит моим принципам, и вообще стрелять себе в голову - никогда!"
| <[ $что(себе) ]> => $"Стрелять себе в $что не намерен."
| <[ $что($кому) ]> => $"Делать мне нечего, стрелять $кому в $что!?"
| _ => $"Нифига не понял, что это (\"прострелить $(кому_и_что)\") может значить?"
}
<[ WriteLine($(str : string)) ]>
}
}
Пример использования:
using Nemerle.Shooting;
прострелить себе ногу;
прострелить VermiciousKnid руку;
прострелить голову Flem1234;
Результат:
Стрелять себе в ногу не намерен.
Делать мне нечего, стрелять VermiciousKnid в руку!?
С радостью прострелю голову Flem1234!
Пока я писал этот вариант, злой модератор сбросил всю ветку про прострелить ногу в мусор
здесь
Итак
using System;
using System.Console;
using Nemerle.Utility;
module Program
{
Main() : void
{
def myBody = BodyPart.Group([BodyPart.Leg("это целая нога:)"), BodyPart.Head(),BodyPart.Hand()]);
WriteLine(myBody.parts);
myBody.Shoot();
WriteLine(myBody.parts);
_ = ReadKey();
}
}
variant BodyPart
{
|Leg
{
mutable s: string;
}
|Head
|Hand
|Group
{
parts: list[BodyPart]
}
public Shoot():void
{
def localShoot(bp){
| BodyPart.Group as p =>
foreach (i in p.parts)
localShoot(i);
| BodyPart.Leg as l => l.s = "Дырка:)";
| _ => ();
}
localShoot(this);
}
public override ToString(): string
{
match (this)
{
| Leg as l => l.s;
| _ => base.ToString();
}
}
}
Здравствуйте, Flem1234, Вы писали:
F>Пока я писал этот вариант, злой модератор сбросил всю ветку про прострелить ногу в мусор
F>здесь
F>Итак
А смеяться где?
Здравствуйте, Сергей Туленцев, Вы писали:
СТ>А смеяться где?
Где угодно...
Можно после смайлика. Просто пример решения задачи используя pattern matching, локальные функции и прочие продвинутые средства
не вижу использования продвинутой макро-системы
VK>Нифига это не смешно, да еще и код коряво написан. Вот како надо простреливать ноги и другие части тела на Nemerle:
VK>[c#]
вот это зачотно, пиши ещо