Map2=lambda F,SEQ: [] if seq==[] else [f (seq[0])] + MAP2 (f, seq[1:]) Filter2=lambda F, seq: [] If seq==[] Else ([seq[ 0]]+filter2 (F, seq[1:]) if f (seq[0]) else Filter2 (F, seq[1:])) Reduce2=lambda f,seq,x:x if seq==[] else Reduce2 (F, S Eq[1:], F (x, seq[0]) scanl=lambda f,seq,x: [x] if seq==[] Else [x] +scanl (F, seq[1:], F (x,seq[0])) Print Map 2 (str, [1,2,3,5,8]) print filter2 (lambda x:x%2==0, range) print Reduce2 (lambda x, y: ". Join ([' (' (') ', ' x, ' + ', y, ') ']), map ( Str,range (1,11)), ' 0 ') print scanl (lambda x, y: ") Join ([' (' (') ', ' x, ' + ', y, ') '), Map (Str,range (1,5)), ' 0 ') #Out: #[' 1 ', ' 2 ', ' 3 ', ' 5 ', ' 8 ']#[0, 2, 4, 6, 8]# (((((((((((() ((((((((() ((((() (((((() +2) +3) +4) +5) +6) +7) #[' +8 ', ' (0+1) ', ' ((((( ', ' (((((0+1) +2) +3) +4)
Recursive implementation of map filter reduce in Python, note: Be careful with memory overflow