PLEAC
От: Mamut Швеция http://dmitriid.com
Дата: 19.06.06 22:00
Оценка: 5 (1)
Если кто еще не знал, PLEAC — Programming Language Examples Alike Cookbook

Добавляйте туда Nemerle и D
От чего, от чего, от чего тах хорошо?
Потому что кто-то любит программиста
<< RSDN@Home 1.2.0 alpha rev. 647>>


dmitriid.comGitHubLinkedIn
Re: PLEAC
От: Андрей Хропов Россия  
Дата: 20.06.06 06:39
Оценка: +1
Здравствуйте, Mamut, Вы писали:

M>Если кто еще не знал, PLEAC &mdash; Programming Language Examples Alike Cookbook


M>Добавляйте туда Nemerle и D

Да там даже C# нет,
а на Java реализовано 16.86% примеров,
а на C++ всего 3.43% !

Похоже что сайт скрипт-ориентирован (ибо Perl/Python/Ruby там 100/85/60 % соответственно).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: PLEAC
От: Mamut Швеция http://dmitriid.com
Дата: 20.06.06 06:51
Оценка:
M>>Если кто еще не знал, PLEAC &mdash; Programming Language Examples Alike Cookbook

M>>Добавляйте туда Nemerle и D

АХ>Да там даже C# нет,
АХ>а на Java реализовано 16.86% примеров,
АХ>а на C++ всего 3.43% !

АХ>Похоже что сайт скрипт-ориентирован (ибо Perl/Python/Ruby там 100/85/60 % соответственно).


Примерно так и есть, но мы ж не боимся трудностей
От чего, от чего, от чего тах хорошо?
Потому что кто-то любит программиста
<< RSDN@Home 1.2.0 alpha rev. 647>>


dmitriid.comGitHubLinkedIn
Re: PLEAC
От: Vermicious Knid  
Дата: 20.06.06 10:07
Оценка: 27 (5)
Здравствуйте, Mamut, Вы писали:

M>Если кто еще не знал, PLEAC &mdash; Programming Language Examples Alike Cookbook


M>Добавляйте туда Nemerle и D

Я думаю не стоит овчинка выделки. Первоисточник всех примеров Perl Cookbook. Не тот это язык, чтобы с него примеры брать.

Большая часть примеров выльется не в сравнение языков, а сравнение стандартных библиотек. Если на Nemerle скорее всего можно все эти примеры переписать используя стандартные библиотеки MS .NET Framework, то для D часто придется использовать сторонние библиотеки(которых кстати довольно мало).

Как сравнение языков даже 99 Bottles of Beer и то лучше. Правда там уже есть и Nemerle, и D. Но Nemerle там представлен мягко говоря далеко не самым красивым кодом. Я сегодня от нечего делать написал и засабмитил пару вариантов программы. Если совсем честно, то не написал, а в основном украл из вариантов для Haskell и D.

Самый краткий вариант(используется питонообразный синтаксис):
#pragma indent
using System

def capitalize = s => Char.ToUpper(s[0]).ToString() + s.Substring(1)

def beers(n)
  | 0 => "no more bottles of beer"
  | 1 => "1 more bottle of beer"
  | _ => $"$n bottles of beer"

def onTheWall = n => $"$(beers(n)) on the wall, $(beers(n)).\n"

def passAround(n)
  | 0 => $"Go to the store and buy some more, $(beers(99)) on the wall.\n"
  | _ => $"Take one down and pass it around, $(beers(n-1)) on the wall.\n"

$[99, 98 .. 0].Iter(n => Console.WriteLine(capitalize(onTheWall(n)) + passAround(n)))


Вариант с использованием foreach, обычного синтаксиса и extention methods:
using System;

module StringExt {
  public Capitalize(this s : string) : string {
    Char.ToUpper(s[0]).ToString() + s.Substring(1)
  }
}

def beers(n) {
  | 0 => "no more bottles of beer"
  | 1 => "1 more bottle of beer"
  | _ => $"$n bottles of beer"
}

def onTheWall = n => $"$(beers(n)) on the wall, $(beers(n)).\n";

def passAround(n) {
  | 0 => $"Go to the store and buy some more, $(beers(99)) on the wall.\n"
  | _ => $"Take one down and pass it around, $(beers(n-1)) on the wall.\n"
}

foreach(n in [99, 98 .. 0])
    Console.WriteLine(onTheWall(n).Capitalize() + passAround(n))


В качестве оправдания практически ненужной в предыдущих примерах функции capitalize вариант с преобразованием чисел в числительные.
def numeral(n)
{
    assert(n <= 99);
    def tens = array["twenty","thirty","fourty","fifty","sixty","seventy","eighty","ninety"];
    def nums = array["no more", "one", "two", "three", "four", "five", "six", 
                    "seven", "eight", "nine", "ten", "eleven", "twelve"];
    def teens = array["thir", "four", "fif", "six", "seven", "eigh", "nine"];
    if (n < 13)
        nums[n] 
    else if (n < 20)
        teens[n - 13] + "teen"
    else
        tens[(n / 10) - 2] + (if ((n % 10) == 0) "" else " " + nums[n % 10])
}
// остальной код поскипан, в этом варианте меняется только функция beers
def beers(n)
{
    | 0 => "no more bottles of beer"
    | 1 => "one more bottle of beer"
    | _ => $"$(numeral(n)) bottles of beer"
}
Re[2]: PLEAC
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.06 00:23
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Похоже что сайт скрипт-ориентирован (ибо Perl/Python/Ruby там 100/85/60 % соответственно).


Дык примеры то ли писались на одном из скриптов, или подбирались од оные.

Но на Немерле там можно в большинстве случаев сделать не хуже чем на Руби. Так что можно просто изучать исходники Руби.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: PLEAC
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.06.06 00:41
Оценка: :)
Здравствуйте, Vermicious Knid, Вы писали:

VK>Большая часть примеров выльется не в сравнение языков, а сравнение стандартных библиотек.


В принципе это полезно для изучающих язык.

VK> Если на Nemerle скорее всего можно все эти примеры переписать используя стандартные библиотеки MS .NET Framework, то для D часто придется использовать сторонние библиотеки(которых кстати довольно мало).


Дык сразу выявляется недостаток языка — остуствие удобных и обширных библиотек.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: PLEAC
От: anonymous Россия http://denis.ibaev.name/
Дата: 21.06.06 06:10
Оценка:
Здравствуйте, VladD2, Вы писали:

АХ>>Похоже что сайт скрипт-ориентирован (ибо Perl/Python/Ruby там 100/85/60 % соответственно).

VD>Дык примеры то ли писались на одном из скриптов, или подбирались од оные.

Все примеры взяты из Perl Cookbook.
Re[4]: PLEAC
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.06.06 22:54
Оценка: +1
Здравствуйте, anonymous, Вы писали:

A>Все примеры взяты из Perl Cookbook.


Что и следовало ожидать. Они подчеркнуто скрптовые.

В прочем если будет время попробую их реализовать. Причем не ради пенисометрии (хотя это тоже забавно), а просто потому, что это неплохой обучающий материал.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.