Transcript
Page 1: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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

Page 2: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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

Page 3: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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

Page 4: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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…

Page 5: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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

Page 6: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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

Page 7: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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

Page 8: 1 COMP 144 Programming Language Concepts Felix Hernandez-Campos Lecture 28: More on Functional Programming COMP 144 Programming Language Concepts Spring

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


Top Related