Cobol, lisp, and python

30
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

Transcript of Cobol, lisp, and python

Page 1: Cobol, lisp, and python

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

Page 2: Cobol, lisp, and python

COBOL – Why?

Software Lifecycle Cheaper to maintain

Y2K

Self-documenting code Verbose

“IF a < b AND > c …” Divisions

Page 3: Cobol, lisp, and python

COBOL – Why?

Divisions Identification Division Environment Division Data Division Procedure Division

Page 4: Cobol, lisp, and python

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

Page 5: Cobol, lisp, and python
Page 6: Cobol, lisp, and python

COBOL – Groups and Elementary data

Page 7: Cobol, lisp, and python
Page 8: Cobol, lisp, and python

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)

Page 9: Cobol, lisp, and python

COBOL - Summary

Readability

Writability

Reliability

Portability

Page 10: Cobol, lisp, and python

LISP

LISt Processing List-based language

2nd High-level language

1958 – John McCarthy for MIT

Page 11: Cobol, lisp, and python
Page 12: Cobol, lisp, and python

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))

Page 13: Cobol, lisp, and python

LISP – Innovations

Garbage Collection

If else statements

Recursion

Page 14: Cobol, lisp, and python

LISP – Linked Lists

Car (first)

Cdr (rest)

Page 15: Cobol, lisp, and python
Page 16: Cobol, lisp, and python

LISP - Examples

If then else (if nil

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

One line variant: (if nil (list ‘2 ‘3) (list ‘5 ‘6))

Page 17: Cobol, lisp, and python

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)))))

Page 18: Cobol, lisp, and python

LISP - Examples

Recursive List Size (defun recursiveSize (L)

(if (null L)

0

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

Page 19: Cobol, lisp, and python

LISP - Examples

Recursive List Sum with “LET” (defun sum (L)

(if (null L)

0

(let

((S1 (first L))

(S2 (sum (rest L))))

+ S1 S2)))

Page 20: Cobol, lisp, and python

LISP- Summary and Comparison

Readability

Writability

Reliability

Page 21: Cobol, lisp, and python

Python

Developed early 1990’s Guido van Rossum ABC language

Python 2.0 2000 Community-supported -> reliability

Modular; community expandable

Python 3.0 2008

Page 22: Cobol, lisp, and python

Python – Readability is Key

Design goal One way to do things Clarity over clever code Whitespace over braces “pass” for No-Op

Page 23: Cobol, lisp, and python

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

Page 24: Cobol, lisp, and python

Python

Comparisons == tests values, not references

A < b <= C works properly

Ternary operator readable “a if b else c”

Page 25: Cobol, lisp, and python

Python

System Requirements Cross platform Python Interpreter

Simplicity Small core language Large libaraies

Page 26: Cobol, lisp, and python

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”)

Page 27: Cobol, lisp, and python

Python - Examples

Function definitiondef greatest(a, b, c):

largest = a if a > b else b

largest = largest if largest > c else c

print(largest)

Function callgreatest(7, 3, 14)

14

Page 28: Cobol, lisp, and python

Python - Examples

Determine if primedef isPrime(num):

prime = True

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

if num % i == 0:

prime = False

return prime

Page 29: Cobol, lisp, and python

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)

Page 30: Cobol, lisp, and python

Python - Summary and Comparison

Readability

Writability

Reliability