Created
May 14, 2019 21:48
-
-
Save mrange/01063e614cebd97e531b50c2492e6a39 to your computer and use it in GitHub Desktop.
python PS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# (v -> Boolean) -> Boolean | |
class State: | |
pass | |
def empty(): | |
return lambda r: True | |
def singleton(v): | |
return lambda r: r(v) | |
def where(f, ps): | |
return lambda r: ps(lambda v: r(v) if f(v) else True) | |
def select(m, ps): | |
return lambda r: ps(lambda v: r(m(v))) | |
def collect(m, ps): | |
return lambda r: ps(lambda v: m(v)(r)) | |
def debug(nm, ps): | |
def dps(r): | |
def dr(v): | |
res = r(v) | |
print("DEBUG - %s - %s - %s" % (nm, res, v)) | |
return res | |
ps(dr) | |
return dps | |
def fromList(vs): | |
def ps(r): | |
for v in vs: | |
if not r(v): | |
return False | |
return True | |
return ps | |
def fold(f, z, ps): | |
st = State() | |
st.acc = z | |
def r(v): | |
st.acc = f(st.acc, v) | |
return True | |
ps(r) | |
return st.acc | |
def toList(ps): | |
acc = [] | |
ps(lambda v: acc.append(v) or True) | |
return acc | |
def first(ps): | |
st = State() | |
st.acc = None | |
def r(v): | |
st.acc = v | |
return False | |
ps(r) | |
return st.acc | |
toList(where(lambda v: v > 2, select(lambda v: v + 1, fromList([1,2,3])))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment