COMP 144 Programming Language ConceptsFelix Hernandez-Campos
11
Lecture 28: Lecture 28: More on Functional ProgrammingMore on Functional Programming
COMP 144 Programming Language ConceptsCOMP 144 Programming Language Concepts
Spring 2002Spring 2002
Felix Hernandez-CamposFelix Hernandez-Campos
April 1April 1
The University of North Carolina at Chapel HillThe University of North Carolina at Chapel Hill
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
22
Advanced Functional ProgrammingAdvanced Functional Programming
• Functional programming languages can increase Functional programming languages can increase readabilityreadability
– But they can also help developing obfuscated codeBut they can also help developing obfuscated code
• UnlambdaUnlambda is a functional programming language is a functional programming language specifically designed for this taskspecifically designed for this task
– It is powerful (Turing-complete)It is powerful (Turing-complete)– It is the ideal language for It is the ideal language for abstraction-eliminationabstraction-elimination
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
33
Programming PrinciplesProgramming Principles
• Seven primitive functions : Seven primitive functions : – kk, , – ss, , – ii, , – vv, , – dd, , – C,C, and and – ..xx
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
44
NumbersNumbers
• Church integers:Church integers:
• <0><0> is is ^f^x$x^f^x$x (i.e. (i.e. `ki`ki). ).
• <1><1> is is ^f^x`$f$x^f^x`$f$x (i.e. (i.e. ii). ).
• <2><2> is is ^f^x`$f`$f$x^f^x`$f`$f$x (i.e. (i.e. ``s``s`kski``s``s`kski). ).
• <3><3> is is ^f^x`$f`$f`$f$x^f^x`$f`$f`$f$x (i.e. (i.e. ``s``s`ksk``s``s`kski``s``s`ksk``s``s`kski). ).
• and so on… and so on…
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
55
Example: FibonacciExample: Fibonacci
• The following Unlambda program calculates and prints the The following Unlambda program calculates and prints the Fibonacci numbers (as lines of asterisks)Fibonacci numbers (as lines of asterisks)
```s``s``sii``s`kk`ki`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks````s``s``sii``s`kk`ki`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks`
`s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`k`s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`k
s``s`kk`kk``s`kk`kr``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kks``s`kk`kk``s`kk`kr``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk
`ks``s``s`ks``s`kk`kk`ki``s``s`ks``s`kk`kk``s`kk`k.*``s``s`ks``s`kk`kk`ks``s``s`ks``s`kk`kk`ki``s``s`ks``s`kk`kk``s`kk`k.*``s``s`ks``s`kk`kk
``s`kki``s``s`ks``s`kk`kk``s`kki``s`kk`ki``s``s`ks``s``s`ks``s`kk`ks````s`kki``s``s`ks``s`kk`kk``s`kki``s`kk`ki``s``s`ks``s``s`ks``s`kk`ks``
s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`k``s``s`ks``s``s`ks`s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`k``s``s`ks``s``s`ks`
`s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`ks``s``s`k`s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`ks``s``s`k
s``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk
`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`kk``s``s`ks``s``ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`kk``s``s`ks``s`
kk`kk``s`kki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`kk``s`kk`kk``s`kki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`kk``s`kk`kk``s`
kk`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``kk`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``
s`kk`kk``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`kss`kk`kk``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks
``s``s`ks``s`kk`kk``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk```s``s`ks``s`kk`kk``s`kk`ks``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``s`kk`
kk``s`kk`kk``s``s`ks``s`kk`kk`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``kk``s`kk`kk``s``s`ks``s`kk`kk`ki``s``s`ks``s``s`ks``s`kk`ks``s``s`ks``
s`kk`kk``s`kk`kk``s`kk`ki``s``s`ks``s`kk`kk``s`kk`ki``s``s`ks``s`kk`kks`kk`kk``s`kk`kk``s`kk`ki``s``s`ks``s`kk`kk``s`kk`ki``s``s`ks``s`kk`kk
`ki``s`kk`ki`ki``s`kk`ki
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
66
Unlambda in UnlambdaUnlambda in Unlambda
• http://www.ofb.net/~jlm/unlambda/unlambda.unl.http://www.ofb.net/~jlm/unlambda/unlambda.unl.gzgz
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
77
The Shocking TruthThe Shocking Truth
• ““It's disgusting — it's revolting — we love It's disgusting — it's revolting — we love it.” it.” CyberTabloidCyberTabloid
• ““Unlambda, the language in which every Unlambda, the language in which every program is an IOUCC.” program is an IOUCC.” Encyclopædia Encyclopædia InterneticaInternetica
• ““The worst thing to befall us since Intercal.” The worst thing to befall us since Intercal.” Computer Languages TodayComputer Languages Today
• ““The effect of reading an Unlambda The effect of reading an Unlambda program is like habing your brains smashed program is like habing your brains smashed out by a Lisp sexp wrapped around an out by a Lisp sexp wrapped around an ENIAC. You won't find anything like it west ENIAC. You won't find anything like it west of Alpha Centauri.” of Alpha Centauri.” The Hitch-Hacker's The Hitch-Hacker's Guide to ProgrammingGuide to Programming
COMP 144 Programming Language ConceptsFelix Hernandez-Campos
88
Source of this evilSource of this evil
• ReferenceReference– http://www.eleves.ens.fr:8080/home/madore/programs/unlhttp://www.eleves.ens.fr:8080/home/madore/programs/unl
ambda/ambda/
• Extra creditExtra credit– A+ guaranteed to the first one that develops a Turtle A+ guaranteed to the first one that develops a Turtle
interpreter in Unlambdainterpreter in Unlambda