Re[39]: Python vs C#
От: FR  
Дата: 13.05.05 12:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


FR>>По объему кода, вот простейшая программка считывает файл построчно и выводит его в другой файл отсортированным по строкам:

WH>Функции readlines в библиотеке .НЕТ нет по этому мы ее напишем.
WH>
WH>        static IEnumerable<string> Lines(Stream stream)
WH>        {
WH>            using (StreamReader reader = new StreamReader(stream))
WH>                for (string line; (line = reader.ReadLine()) != null; )
WH>                    yield return line;
WH>        }
WH>

WH>
FR>>arr = open("test.txt").readlines()
FR>>arr.sort()
WH>
WH>            List<string> lines;
WH>            using (Stream file = File.OpenRead("text.txt"))
WH>                lines = new List<string>(Lines(file));
WH>            lines.Sort();
WH>

WH>
FR>>out = open("out.txt", "w")
FR>>for line in arr:
FR>>    print >> out, line,
WH>
WH>            using (TextWriter file = File.CreateText("out.txt"))
WH>                foreach (string line in lines)
WH>                    file.WriteLine(file);
WH>

WH>Отсутствие типизации и необходимости объявлять переменные в питоне я считаю большим недостатком.

Код все равно больше по объему.
А отсутствие типизпции может быть и преимуществом.


FR>>Суммирование чисел из файла(в каждой строке файла одно число):

WH>Опять библиотека...

В первом примере никаких библиотек не использовалось только встроенные возможности языка.
В этом же примере показана возможность программировать в функциональном стиле и шарпу тоже не мешало бы такое ввести в стандартные библиотеки

WH>Да будут операторы

WH>
WH>        delegate T Operator<T>(T l, T r);
WH>        interface IMathOperators<T>
WH>        {
WH>            Operator<T> Add { get; }
WH>            Operator<T> Sub { get; }
WH>            Operator<T> Mul { get; }
WH>            Operator<T> Div { get; }
WH>        }
WH>        class MathOperatorsInt : IMathOperators<int>
WH>        {
WH>            public Operator<int> Add { get { return delegate(int l, int r) { return l + r; }; } }
WH>            public Operator<int> Sub { get { return delegate(int l, int r) { return l - r; }; } }
WH>            public Operator<int> Mul { get { return delegate(int l, int r) { return l * r; }; } }
WH>            public Operator<int> Div { get { return delegate(int l, int r) { return l / r; }; } }
WH>        }
WH>        static Dictionary<Type, object> MathOperatorsMap = new Dictionary<Type, object>();
WH>        static IMathOperators<T> MathOperators<T>()
WH>        {
WH>            return (IMathOperators<T>)MathOperatorsMap[typeof(T)];
WH>        }
WH>        static Program()
WH>        {
WH>            MathOperatorsMap.Add(typeof(int), new MathOperatorsInt());
WH>        }
WH>

WH>Теперь сделаем недостающие функции
WH>
WH>        delegate T Parse<T>(string s);
WH>        static IEnumerable<T> Map<T>(Stream stream)
WH>        {
WH>            Parse<T> parse = (Parse<T>)Delegate.CreateDelegate(typeof(Parse<T>),
WH>                typeof(T), "Parse");
WH>            foreach (string line in Lines(stream))
WH>                yield return parse(line);
WH>        }
WH>        static T Sum<T>(IEnumerable<T> numbers)
WH>        {
WH>            Operator<T> add = MathOperators<T>().Add;
WH>            T val = default(T);
WH>            foreach (T number in numbers)
WH>                val = add(val, number);
WH>            return val;
WH>        }
WH>

FR>>
FR>>import sys, itertools
FR>>print sum(itertools.imap(int, open("in.txt")))
FR>>

WH>
WH>    using (Stream file = File.OpenRead("text.txt"))
WH>        Console.WriteLine(Sum(Map<int>(file)));
WH>


FR>>Другой пример я уже приводил Владу, простейший калькулятор(он из темы где вы с Владом спорили и ты делал этот же калькулятор на плюсах ссылки к сожалению не помню)

WH>Это тоже решается библиотекой.

В примере на питоне все решается без библиотек.

WH>А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.


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