我正在学习 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
获取状态和值?
以下代码适用于 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)