Очередной, весенний, взрыв пенисометрии :)
От: BulatZiganshin  
Дата: 27.03.08 09:28
Оценка: 6 (1)
Здравствуйте, Don Reba, Вы писали:

DR>
DR>SumLines("test.txt");
DR>


just for comparison :

import Control.Arrow
main = interact (lines >>> map sumline >>> unlines)
sumline = words >>> map (read::String->Int) >>> sum >>> show

недёшево "человеческое лицо" обходится, одним словом


02.04.08 13:33: Ветка выделена из темы несложный ФЯ с человеческим лицом
Автор: dmz
Дата: 26.03.08
— VladD2
Люди, я люблю вас! Будьте бдительны!!!
Re: Очередной, весенний, взрыв пенесометрии :)
От: dmz Россия  
Дата: 27.03.08 10:12
Оценка:
DR>>
DR>>SumLines("test.txt");
DR>>


BZ>just for comparison :


BZ>import Control.Arrow

BZ>main = interact (lines >>> map sumline >>> unlines)
BZ>sumline = words >>> map (read::String->Int) >>> sum >>> show

BZ>недёшево "человеческое лицо" обходится, одним словом


Человеческое лицо — это вот:

len(open('xorg.conf').readlines())


или

если я, конечно, правильно понял, что тут происходит. Но Nemerle в таком примере не впечатлил, да.
Re[2]: Очередной, весенний, взрыв пенесометрии :)
От: BulatZiganshin  
Дата: 27.03.08 10:32
Оценка:
Здравствуйте, dmz, Вы писали:

dmz>
dmz>len(open('xorg.conf').readlines())
dmz>


dmz>если я, конечно, правильно понял, что тут происходит. Но Nemerle в таком примере не впечатлил, да.


нет, здесь печатается сумма чисел в каждой строке. ваш ход:
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Очередной, весенний, взрыв пенесометрии :)
От: dmz Россия  
Дата: 27.03.08 10:44
Оценка:
dmz>>если я, конечно, правильно понял, что тут происходит. Но Nemerle в таком примере не впечатлил, да.

BZ>нет, здесь печатается сумма чисел в каждой строке. ваш ход:


Пардон тогда:

[reduce(lambda a,b:int(a)+int(b), x.split(' ')) for x in open('nums').readlines()]
Re[4]: Очередной, весенний, взрыв пенесометрии :)
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 27.03.08 11:11
Оценка:
Ha Ruby, как обычно, короче всего:
IO.foreach("nums.txt"){|s| p s.split(' ').inject{|a,b| a.to_i+b.to_i}}
Re[4]: Очередной, весенний, взрыв пенесометрии :)
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 27.03.08 11:23
Оценка:
Здравствуйте, dmz, Вы писали:


dmz>>>если я, конечно, правильно понял, что тут происходит. Но Nemerle в таком примере не впечатлил, да.


BZ>>нет, здесь печатается сумма чисел в каждой строке. ваш ход:


dmz>Пардон тогда:


dmz>
dmz>[reduce(lambda a,b:int(a)+int(b), x.split(' ')) for x in open('nums').readlines()]
dmz>


Можно и так.

using Nemerle.Utility;
using System.IO;
using System;

module TextReadeExtension
{
    public ReadLines(this reader : TextReader) : list[string]
    {
        mutable lines = [];
        mutable line = reader.ReadLine();
        while (null != line)
        {
            lines ::= line;
            line = reader.ReadLine();
        }
        lines;
    }
}

File
    .OpenText("test.txt")
    .ReadLines()
    .Map(x => x.Split(array[' ']).Fold(0, (a, b) => int.Parse(a) + b))
    .Iter(Console.WriteLine : int -> void);
Ce n'est que pour vous dire ce que je vous dis.
Re[5]: Очередной, весенний, взрыв пенесометрии :)
От: Константин Россия  
Дата: 27.03.08 11:42
Оценка: :)
Здравствуйте, D. Mon, Вы писали:

DM>Ha Ruby, как обычно, короче всего:


Думаю, на perl'е ещё короче, но это уже звериный оскал
Re[6]: Очередной, весенний, взрыв пенесометрии :)
От: _pk_sly  
Дата: 27.03.08 11:48
Оценка:
Здравствуйте, Константин, Вы писали:

К>Думаю, на perl'е ещё короче, но это уже звериный оскал


к сожалению, там нет встроенного fold/reduce/iter... для списков — только map.
Re[6]: Очередной, весенний, взрыв пенесометрии :)
От: _pk_sly  
Дата: 27.03.08 12:04
Оценка:
Здравствуйте, Константин, Вы писали:

К>Думаю, на perl'е ещё короче, но это уже звериный оскал


конечно, можно "всё написать"...

если сначала написать

sub add($$)
{
    my ($a,$b) = @_;
    return $a+$b;
}
sub reduce
{
    my $op=shift;
    my $a = shift;
    for my $i (@_) {
        $a = &$op($a,$i);
    }
    return $a;
}


то программа в аналогичном стиле будет выглядеть так:

print join("\n",map { reduce(\&add,0,split) } <>);

либо
map { print reduce(\&add,0,split),"\n"; } <>;

что менее "функционально", но немного короче
Re[6]: Очередной, весенний, взрыв пенесометрии :)
От: Mirrorer  
Дата: 27.03.08 12:07
Оценка: 27 (3) :))
Здравствуйте, Константин, Вы писали:

DM>>Ha Ruby, как обычно, короче всего:

К>Думаю, на perl'е ещё короче, но это уже звериный оскал

Ноги, крылья, главное хвост !!!
+/"1 ". > (< ;. _2) freads 'my.txt'
Re[7]: Очередной, весенний, взрыв пенесометрии :)
От: _pk_sly  
Дата: 27.03.08 12:11
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Ноги, крылья, главное хвост !!!

M>
M>+/"1 ". > (< ;. _2) freads 'my.txt'
M>


это что за зверь?!

предлагаю изобрести язык специально для решения этой задачи. размер программы равен 0!
Re[8]: Очередной, весенний, взрыв пенесометрии :)
От: Mirrorer  
Дата: 27.03.08 12:19
Оценка:
Здравствуйте, _pk_sly, Вы писали:

__>это что за зверь?!

Эт не зверь. Это старый добрый джей.

Когда начинается пенисометрия в разрезе "кто короче" ему нет равных
Re: Очередной, весенний, взрыв пенесометрии :)
От: . Великобритания  
Дата: 27.03.08 12:20
Оценка:
BulatZiganshin wrote:

> import Control.Arrow

> main = interact (lines >>> map sumline >>> unlines)
> sumline = words >>> map (read::String->Int) >>> sum >>> show
Вот они страхи... Может это у меня опыта нет, но из всех приведённых программ, если не считать K (или что там у Mirrorer), эта самая непонятная.
Что такое interact? lines? unlines? words? а особенно >>>?
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Очередной, весенний, взрыв пенесометрии :)
От: palm mute  
Дата: 27.03.08 12:37
Оценка: 4 (2)
Здравствуйте, ., Вы писали:

>> import Control.Arrow

>> main = interact (lines >>> map sumline >>> unlines)
>> sumline = words >>> map (read::String->Int) >>> sum >>> show
.>Вот они страхи... Может это у меня опыта нет, но из всех приведённых программ, если не считать K (или что там у Mirrorer), эта самая непонятная.
.>Что такое interact? lines? unlines? words? а особенно >>>?
interact f читает стандартный входной поток, применяет к нему функцию f, пишет в стандартный выходной поток.
lines — разбивает текст по символу '\n'
words — разбивает строку по пробелам
>>> — конвейер (шеллом пользоваться приходилось?).
Re: Очередной, весенний, взрыв пенесометрии :)
От: WolfHound  
Дата: 27.03.08 12:37
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>недёшево "человеческое лицо" обходится, одним словом

Ты же понимаешь что если написать все нужные комбинаторы то все точно также получится...
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Очередной, весенний, взрыв пенесометрии :)
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 27.03.08 12:43
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>just for comparison :


BZ>import Control.Arrow

BZ>main = interact (lines >>> map sumline >>> unlines)
BZ>sumline = words >>> map (read::String->Int) >>> sum >>> show

BZ>недёшево "человеческое лицо" обходится, одним словом


Это не эквивалентный код. Интересно, как на Хаскеле будет выглядеть открытие и закрытие файла? Также, интересно как в нём обработать некорректный формат.

try
{
    SumLines("test.txt");
}
catch
{
    _ is FormatException => Console.WriteLine("Incorrect file format.");
}
Ce n'est que pour vous dire ce que je vous dis.
Re[7]: Очередной, весенний, взрыв пенесометрии :)
От: _pk_sly  
Дата: 27.03.08 12:55
Оценка:
Здравствуйте, Mirrorer, Вы писали:

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


DM>>>Ha Ruby, как обычно, короче всего:

К>>Думаю, на perl'е ещё короче, но это уже звериный оскал

M>Ноги, крылья, главное хвост !!!

M>
M>+/"1 ". > (< ;. _2) freads 'my.txt'
M>


а где переводы строки между строками?
Re[9]: Очередной, весенний, взрыв пенесометрии :)
От: _pk_sly  
Дата: 27.03.08 12:57
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Эт не зверь. Это старый добрый джей.

M>Когда начинается пенисометрия в разрезе "кто короче" ему нет равных

таки на перле сравнимо получается
#!perl -np
$_=reduce(\&add,0,split);

(reduce и add) описаны отдельно
Re[8]: Очередной, весенний, взрыв пенесометрии :)
От: Mirrorer  
Дата: 27.03.08 13:09
Оценка:
Здравствуйте, _pk_sly, Вы писали:


M>>
+/"1 ". > (< ;. _2) freads 'my.txt'


__>а где переводы строки между строками?


А-а-а-а... Меня поймали

А ежели по сути, то переводы строки между строками при чтении файла обрабатывает freads.
А для того чтобы список
1 2 3

превратить в такую штуку
1
2
3

достаточно воспользоваться стандартным глаголом ,.
то есть результатом слудеющей строки
,. 1 2 3

будет
1 
2
3


Ну, или применительно к нашей задаче
,. +/"1 ". > (< ;. _2) freads 'my.txt'
Re[2]: Очередной, весенний, взрыв пенесометрии :)
От: BulatZiganshin  
Дата: 27.03.08 13:12
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>Это не эквивалентный код. Интересно, как на Хаскеле будет выглядеть открытие и закрытие файла? Также, интересно как в нём обработать некорректный формат.


import Control.Arrow
import Control.Exception

main = handle print $ do
       readFile "test" >>= return.process >>= putStr
process = lines >>> map sumline >>> unlines
sumline = words >>> map (read::String->Int) >>> sum >>> show
Люди, я люблю вас! Будьте бдительны!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.