Как прострелить себе ногу используя Nemerle
От: Flem1234  
Дата: 31.07.07 13:07
Оценка:
Пока я писал этот вариант, злой модератор сбросил всю ветку про прострелить ногу в мусор
здесь

Итак
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();
      }
  }
  
}


Re: Как прострелить себе ногу используя Nemerle
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 31.07.07 13:12
Оценка:
Здравствуйте, Flem1234, Вы писали:

F>Пока я писал этот вариант, злой модератор сбросил всю ветку про прострелить ногу в мусор

F>здесь

F>Итак

А смеяться где?
--
Re[2]: Как прострелить себе ногу используя Nemerle
От: Flem1234  
Дата: 31.07.07 13:16
Оценка:
Здравствуйте, Сергей Туленцев, Вы писали:

СТ>А смеяться где?


Где угодно... Можно после смайлика. Просто пример решения задачи используя pattern matching, локальные функции и прочие продвинутые средства
Re[3]: Как прострелить себе ногу используя Nemerle
От: _pk_sly  
Дата: 31.07.07 13:23
Оценка:
не вижу использования продвинутой макро-системы
Re: Как прострелить себе ногу используя Nemerle
От: игппук Беларусь  
Дата: 31.07.07 14:15
Оценка: 1 (1) +6
Здравствуйте, Flem1234, Вы писали:

F>Пока я писал этот вариант, злой модератор сбросил всю ветку про прострелить ногу в мусор


это тож туда надо.
проклятый антисутенерский закон
Re: Как прострелить себе ногу используя Nemerle
От: Vermicious Knid  
Дата: 31.07.07 15:39
Оценка: 12 (4) :))) :))) :))) :))) :))
Здравствуйте, 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!
Re[2]: Как прострелить себе ногу используя Nemerle
От: Awaken Украина  
Дата: 31.07.07 19:48
Оценка:
VK>Нифига это не смешно, да еще и код коряво написан. Вот како надо простреливать ноги и другие части тела на Nemerle:
VK>[c#]

вот это зачотно, пиши ещо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.