70
A language that doesn’t affect the way you think about programming, is not worth knowing”

“ A language that doesn’t affect the way you think about programming, is not worth knowing”

Embed Size (px)

Citation preview

“A language that doesn’t affect the way you think about programming, is not worth knowing”

Some Initial Thoughts, and Recap• From the Church-Turing thesis all computers are equivalent to a Turing Machine and therefore are equivalent to each other.

• Computer manufacturers admit this; they do not say “our machine has some magic instruction which makes our computer more powerful than the competition”. Their advertising goes like this: “Our machines are faster, cheaper, easier to program and are more greener”

• From the Church-Turing thesis all programs can be constructed using two registers and two instructions, so all programming languages are equivalent in expressibility (power,…)

• Language developers admit this; they do not say “our language has some magic feature which allows our language to do more than in any other language”. Instead, their advertising goes like this. “Our language is more user-friendly, our compilers are faster and they produce smaller executable files, and are more greener”

Why are these two instructions so fundamental?

decjmpreg reg,lab inc reg

What languages do we know ?

Java

Ada

ALGOL 60

Assembler

Basic

FORTRANLisp

Scheme

Joy

Haskell

Clean

COBOL

Erlang

Prolog

FP

F#Lua

Occam

Oz

Pascal

Python

C++

SmallTalk

C#

C

PHP

Tcl

LangLang

LangLang

Lang

Lang

Lang

Lang

Lang

LangLang

Lang

Paradigm

Paradigm

Paradigm

Paradigm

Programming Paradigms

What is a “Paradigm” ?

Important Paradigms

• Imperative (procedural)

• Declarative

• Functional

• Logic

• Object Oriented

• Event Driven

OO

Functional

Logic

Imperative

Imperative vx. Declarative

float x;

float function square(float a) {

float b;

b = a x a;

return b;

}

x = square(3);

(define (square a) (x a a))

(square 3)

Matlab

Lisp

C

Java

C++

Event Driven

ActionScript

Prolog

Functional

Object Oriented

Logic

Imperative

Assembler

Generations

1st Machine – level (switches)

2nd Assembler

3rdProgrammer-friendly: C++, Java, FORTRAN, COBOL

4th Application: SQL, SPSS

5th Constraint: Prolog, OPS5 (AI)

Paradigms: Imperative

• Focus on dynamic aspect of computation – operational semantics

• Specifies step-by step what must be done

Pure Forms

• Godel’s purely descriptive recursive function formalism

• Realized by Mc.Carthy’s Lisp

• Turing’s Imperative formalism

Paradigms: Functional

Paradigms: Logic

Paradigms: Object Oriented

Paradigms: Event Driven

Using conditional expressions to define recursive functions

Thesis: All computable functions can be defined by the recursive use of conditional expressions.

if p then a else b

n! = g(n,1)

where

g(n,s) = if n = 0 then s else g(n – 1, n x s)

Equivalence of imperative and functional programming

Flow Diagrams: Turing Von Neumann and McCarthy

Prolog Syntax Sheet Facts and Rules

parent(abraham, isaac).

Fact. Lower case for names.

parent(isaac, esau).

Fact. Lower case for names.

grandfather(X,Y) :- parent(X,A),parent(A,Y).

Rule. If X is the grandfather of Y then X is the parent of A and A is the

parent of Y. For example, if george “X” is the parent of colin “A” and colin “A” is the

parent of tristan “Y” then george “X” is the grandparent of Tristan “Y”.

Queries

?- parent(abraham,X).

The capital X designates an “output” variable which will be all sons of

Abraham.

?- grandfather(abraham,X).

The capital X designates an “output” variable which will be all grandchildren

of Abraham.

Recursion

Recursion See Recursion

On page 269 of Kernighan and Richie’s book The C Programming language

recursion 86,139,141,182,202,269

Recursion in Language: 5thC BC Panini Sanskrit Grammar Rules

20thC Chomsky theorizes that unlimited extension of English is possible through the use of recursion.

… try Googling “Recursion”

There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we now know we don’t know. But there are also unknown unknowns. These are things we do not know we don’t know

US Defense Secretary Donald Rumsfeld on February 12, 2002

Recursion in Language

begin article adjective noun end

ornate noun

beginornatenoun

relativepronoun

verb

end

preposition

fancynoun

verb

fancynoun

fancynoun

fancy noun

Recursion in Language

begin article adjective noun end

ornate noun

beginornatenoun

relativepronoun

verb

end

preposition

fancynoun

verb

fancynoun

fancynoun

fancy noun

Recursion in Language

begin article adjective noun end

beginornatenoun

relativepronoun

verb

end

preposition

fancynoun

verb

fancynoun

fancynoun

Recursion is not Self-Reference

A recursive function makes reference to a simplified version of itself:(I am) better than what (I was)

I’m the humblest person I know

I never make misteaks

“I never make predictions. I never have and I never will”

This sentence contains five words

This sentence no verb

( )A

A +

var

A

Compilers - Parsing

( )

+

var

A

var = expression

term

+

-

term

+

-

var

num

( )expression

Statement

Expression

Term

Back to the “Timeline”

Our contemporary languages have evolved (?) or have developed (?) from languages of the past. What will our future languages look like?

In other words what are our future computing needs (or desires) ?

Monty Python Holy Grail

witch(X) :- burns(X),female(X).burns(X) :- wooden(X).wooden(X) :- floats(X).

wooden(woodBridge).stone(stoneBridge).

floats(bread).floats(apple).floats(cherry).

floats(X) :- sameweight(duck, X).female(girl).sameweight(duck,girl).

?- witch(girl)

Monty Python Holy Grail

Yes[trace] 12 ?- witch(girl). Call: (7) witch(girl) ? creep Call: (8) burns(girl) ? creep Call: (9) wooden(girl) ? creep Call: (10) floats(girl) ? creep Call: (11) sameweight(duck, girl) ? creep Exit: (11) sameweight(duck, girl) ? creep Exit: (10) floats(girl) ? creep Exit: (9) wooden(girl) ? creep Exit: (8) burns(girl) ? creep Call: (8) female(girl) ? creep Exit: (8) female(girl) ? creep Exit: (7) witch(girl) ? creep

Yes

Coda

It is easier to write an incorrect program than to reada correct one.

There are two ways to write error-free programs, only the third one works.

It is easier to change the specification to fit theprogram than vice-versa

Why did the Roman Empire collapse?What is the Latin for “office automation” ?

to tree :sizesetpencolor [255 000 000]

if :size < 5 [stop] fd :size lt 30 tree :size*0.7 rt 60 tree :size*0.7 lt 30 bk :sizeend