Ответы пользователя по тегу Функциональное программирование
  • Какая должна быть функция?

    @nirvimel
    функция — это соответствие между элементами двух множеств, установленное по такому правилу, что каждому элементу одного множества ставится в соответствие некоторый [один] элемент из другого множества.

    Функция (математика)

    Следовательно, не может существовать такой функции y(x), в которой одному значению аргумента x соответствуют разные значения функции y, как у вас (4, 0.5), (4, 1), (4, 1.5), (4, 2).

    Зато вполне могла бы существовать x(y), график которой проходил бы через данные точки.
    Ответ написан
    Комментировать
  • Копируется ли состояние при каждой операции над монадой состояния в Haskell?

    @nirvimel
    Несмотря на то, что State внутри тоже стек, надо разделить саму State и структуру данных, которая через него протаскивается:
    from collections import namedtuple
    
    State = namedtuple('State', ('fx', 'previous'))
    State.unit = staticmethod(lambda value=None: State(lambda: value, None))
    State.bind = lambda self, fx: State(fx, self)
    State.get = lambda self: self.fx(self.previous.get()) if self.previous else self.fx()
    
    push = lambda value: lambda stack: (value, stack) if stack else value
    pop = lambda stack: stack[1] if isinstance(stack, tuple) else stack
    toList = lambda stack: toList(stack[1]) + [stack[0]] if isinstance(stack, tuple) else [stack]
    
    print (State.unit()
           .bind(push(1))
           .bind(push(2))
           .bind(push(3))
           .bind(pop)
           .bind(toList)
           .get()) # [1, 2]


    toList - довольно медленная, приведена только для примера.
    Ответ написан
    Комментировать
  • Scala: с чего начать?

    @nirvimel
    Лучше всего начинать с классики:
    51S7sMsoAdL._SX377_BO1,204,203,200_.jpg
    На русском из книг пока только это:
    6d8274274c95a316d0cf1ba9ac36cfda.jpg
    Еще на русском достойно внимания:
    1. Путеводитель неофита по Scala.
    2. Scala в примерах (попытка перевода Scala by examples, Martin Odersky).

    Ответ написан
    Комментировать