cobol, lisp, and python joseph hoeppner. cobol background released in 1959 grace hopper industry,...

32
COBOL, LISP, and Python Joseph Hoeppner

Upload: lenard-welch

Post on 24-Dec-2015

218 views

Category:

Documents


1 download

TRANSCRIPT

COBOL, LISP, and Python

Joseph Hoeppner

COBOL Background

Released in 1959

Grace Hopper

Industry, universities, and government collaboration

Cold War pressures

80% of business transactions

65% of all code is in COBOL

COBOL – Why?

Software Lifecycle

Cheaper to maintain

Y2K

Self-documenting code

Verbose

“IF a < b AND > c …”

Divisions

COBOL – Why?

Divisions

Identification Division

Environment Division

Data Division

Procedure Division

COBOL – Data Division

Data Division

Pictures

9 = digit

X = any character

A = alphabetic character

V = decimal point position

S = sign

Repeats

PIC 9 (4) = 9999

COBOL – Groups and Elementary data

COBOL

Reliability

Stood test of time

Has “ALTER X TO PROCEED TO Y” (a negative)

Uses GOTO statements (a negative)

Today

Cross platform: OpenCOBOL C translation

IDEs (Net Express)

COBOL - Summary

Readability

Writability

Reliability

Portability

LISP

LISt Processing

List-based language

2nd High-level language

1958 – John McCarthy for MIT

LISP - Syntax

Function call: “(fun arg1 arg2)”

(+ 1 2 3)

Lists

(list ‘3 ‘7 ‘apples)

(3 7 apples)

(list ‘13 list(‘3 ‘5))

(13 (3 5))

LISP – Innovations

Garbage Collection

If else statements

Recursion

LISP – Linked Lists

Car (first)

Cdr (rest)

LISP - Examples

If then else

(if nil

(list ‘2 ‘3)

(list ‘5 ‘6))

One line variant:

(if nil (list ‘2 ‘3) (list ‘5 ‘6))

LISP - Examples

Factorial

(defun factorial (n)

(if (<= n 1)

1

(* n (factorial (- n 1)))))

One line variant:

(defun factorial (n) (if (<= n 1) 1 (* n (factorial (- n 1)))))

LISP - Examples

Recursive List Size

(defun recursiveSize (L)

(if (null L)

0

(1+ (recursiveSize(rest L)))))

LISP - Examples

Recursive List Sum with “LET”

(defun sum (L)

(if (null L)

0

(let

((S1 (first L))

(S2 (sum (rest L))))

+ S1 S2)))

LISP- Summary and Comparison

Readability

Writability

Reliability

Python

Developed early 1990’s Guido van Rossum

ABC language

Python 2.0 2000

Community-supported -> reliability

Modular; community expandable

Python 3.0 2008

Python – Readability is Key

Design goal

One way to do things

Clarity over clever code

Whitespace over braces

“pass” for No-Op

Python

Writability

Similar to other OO languages

Verification support

Interpreted, assert, no statements in conditions

Clean style

Few keywords

Simple grammar -> few ways to do something

Python

Comparisons

== tests values, not references

A < b <= C works properly

Ternary operator readable

“a if b else c”

Python

System Requirements

Cross platform

Python Interpreter

Simplicity

Small core language

Large libaraies

Python - Examples

a = 15

if(a < 10):

print(“input less than 10”)

elif(10 < a < 20):

print(“input between 10 and 20”)

else:

print(“input greater than 20”)

Python - Examples

Function definition

def greatest(a, b, c):

largest = a if a > b else b

largest = largest if largest > c else c

print(largest)

Function call

greatest(7, 3, 14)

14

Python - Examples

Determine if prime

def isPrime(num):

prime = True

for i in range(2, (num / 2) + 1):

if num % i == 0:

prime = False

return prime

def tenPrimes():

list = []

count = 0

current = 2

#store the first 10 primes in a list

while count < 10:

if isPrime(current):

count += 1

list.append(current)

current = current + 1

#print the list

for element in list:

print(element)

Python - Summary and Comparison

Readability

Writability

Reliability

Python - Examples

Demo