From f61026119df4700f69eb73e95620bc5928ca0fcb Mon Sep 17 00:00:00 2001 From: User Date: Tue, 13 Oct 2009 02:52:09 +0000 Subject: Grand rename for gitit transfer --- software/functional programming | 52 ----------------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 software/functional programming (limited to 'software/functional programming') diff --git a/software/functional programming b/software/functional programming deleted file mode 100644 index 4720280..0000000 --- a/software/functional programming +++ /dev/null @@ -1,52 +0,0 @@ -=================================== -Functional Programming -=================================== - -Recursion --------------- -**Partial** functions can recurse endlessly over a finite input. **Total** -functions will terminate/halt over a finite input. (TODO: check this -definition) - -Collectors --------------- -The collector concept/pattern/paradigm is the one I am least familiar with -in functional programming. - -My current understanding is that they essentially allow allow recursive -functions to maintain something like state by wrapping immutable functions -or variables in layer after layer of functions and just holding on to -the outermost layer. For instance, the typical way to write a ``length`` -function in python would be:: - ->>> def how-long(x): ->>> l = 0 ->>> while x.has_next() ->>> l = l+1; ->>> x.pop() ->>> return l - -Using recursion, we could do:: - ->>> def how-long-recurse(x): ->>> if x.has_next() ->>> x.pop() ->>> return how-long-recurse(x) + 1 ->>> else ->>> return 0 - -Using the collector paradigm, we could do:: - ->>> def add1(x): return a+1; ->>> def how-long-col(x, col): ->>> if x.has_next() ->>> return col(0) ->>> else ->>> x.pop() ->>> return how-long-col(x, lambda a: col(add1(a))) - -The first two ways, the plus one operation is actually executed at any given -time, while with the collector implementation we're really creating a -function step by step which will give the answer at the end when it is all -executed. - -- cgit v1.2.3