Здравствуйте, 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>А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.
Так давай реальные примеры, лучше в виде постоновки небольших задач.