Substring/Top and tail: Difference between revisions

→‎{{header|Python}}: Variant - composing atomic functional expressions for slices
(→‎{{header|Python}}: Variant - composing atomic functional expressions for slices)
Line 1,343:
print "socks"[:-1] # strip last character
print "brooms"[1:-1] # strip both first and last characters</lang>
 
 
Or, composing atomic functional expressions for these slices:
<lang python>from functools import (reduce)
 
 
def main():
print (
ap([tail, init, compose(init)(tail)])(
["knights"]
)
)
 
# --> ['nights', 'knight', 'night']
 
 
# GENERIC -------------------------------------------------
 
# tail :: [a] -> [a]
def tail(xs):
return xs[1:]
 
 
# init::[a] - > [a]
def init(xs):
return xs[:-1]
 
 
# ap (<*>) :: [(a -> b)] -> [a] -> [b]
def ap(fs):
return lambda xs: reduce(
lambda a, f: a + reduce(
lambda a, x: a + [f(x)], xs, []
), fs, []
)
 
 
# compose (<<<) :: (b -> c) -> (a -> b) -> a -> c
def compose(g):
return lambda f: lambda x: g(f(x))
 
 
if __name__ == '__main__':
main()</lang>
{{Out}}
<pre>['nights', 'knight', 'night']</pre>
 
=={{header|Racket}}==
9,659

edits