• Perl Python functional_programming Изучали функциональные возможности перла и питона. Задача — посчитать \sum_{x=i}^n f(g(x)). Пользоваться при вычислении суммы императивщиной запрещалось.
    Решение для пайтон — всё нашлось из коробки =)
    $ cat tst.py
    #!/usr/bin/python

    X = range(1,11)
    i,n = 5,9
    print reduce(lambda x,y: x+y, map(lambda x: 1./x, map(lambda x: x**2, X[i:n+1])))
    Решение для перл — к сожалению пришлось ставить Language::Functional ради foldl

    $ cat tst.pl
    #!/usr/bin/perl -w

    use Language::Functional ':all';
    use strict;

    my @arr = 1..10;
    my ($i, $n) = (5,9);

    print my $x = foldl1 {shift() + shift()} [map {1/$_} (map {$_**2} @arr[$i..$n])];

    Результаты работы:
    $ python tst.py
    0.0861566200554
    $ perl -l tst.pl
    0.0861566200554296

Replies (6)

  • @teferi, там $x лишний совсем =) и я не написал, но изначально дано что f(x) = 1/x, а g(x) = x**2 =)
  • @teferi, @mvuets и тот и другой просто для наглядности. зря не назвал их одинаково. @arr и X это массив и список чисел от 1 до 10.
  • @teferi, @teferi Да. в конечном итоге можно и без них обойтись, просто когда знакомый описывал задачу — сказал что x — некие значения от i до n. Корректнее было бы написать наверное f(g(x_i))
  • @teferi, @mvuets нет .... for 6..10. Еще раз поставлю задачу. Есть массив неких значений. Нужно посчитать \sum^n_{i=m} f(g(x_i)). Где f(x) и g(x) — некие функции, которые должны быть оформленны в виде лямбд. Пользоваться императивными приемами запрещается(цикл for к ним относится). Мини тест на кошерность функциональных возможностей языка. =)
  • @teferi, @aeinner Твоё кунг фу сльно! Но мастера техники Больших Усов и Длинной Змеи(я в курсе в честь чего назван python) не отстают!
  • @teferi, @mvuets да, можно, но так получается не очень кошерно. опять-таки присваивание переменной значения — императивный прием. А вот шестому перлу зачет =)