我如何从 PyMonad 库中的 State 获得价值?

问题描述 投票:0回答:1

我正在学习 PyMonad,试图触及函数式编程的皮毛。我有这个代码:

from pymonad.tools import curry
from pymonad.state import State

user_init = {'items': [], 'money': 2000}

items = {'apples': 70,
         'wine': 300,
         'milk': 80,
         'chips': 100
         }

user_state = State(user_init['items'], user_init['money'])


@curry(2)
def buy(item, user_items):
    @State
    def count_computation(old_count):
        return user_items.append(item), old_count - items[item]
    return count_computation

finale = user_state.then(buy('wine')).then(buy('apples')).then(buy('chips')).then(buy('chips')).then(buy('milk'))

如何从

finale
user_state
获取状态和值?

python functional-programming
1个回答
0
投票

以下代码适用于 pymonad 2.4.0

from pymonad.tools import curry
from pymonad.state import State

user_init = {'items': [], 'money': 2000}

items = {'apples': 70,
         'wine': 300,
         'milk': 80,
         'chips': 100
         }

user_state = State.insert(user_init['items'])

@curry(2)
def buy(item, user_items):
    def count_computation(old_count):
        return user_items + [item], old_count - items[item]
    return State(count_computation)  

finale = user_state.then(buy('wine')).then(buy('apples')).then(buy('chips')).then(buy('chips')).then(buy('milk'))

fin = finale.run(user_init['money']) 

print(fin)  # (['wine', 'apples', 'chips', 'chips', 'milk'], 1350)
© www.soinside.com 2019 - 2024. All rights reserved.