CS 350 Sem I 2015-16

Table of Contents

1 Course

1.1 About the Course

"19: A language that doesn't affect the way you think about programming, is not worth knowing." - Alan J. Perlis

Text Concepts, Techniques and Models of Computing by van Roy and Haridi. We will also use research articles and other books.

Schedule M Th 2-3:30 pm

Classroom Kadim Diwan 101

Submissions Moodle

Top

1.2 Weightage

NumberWeightage
Homeworks330
Quizzes210
Midsem125
Endsem135

1.3 Homework Late Submission Policy:

Late byPenalty
< 1 day10 %
between 1 day and 1 week25 %
between 1 week and 2 weeks50 %
later than 2 weeks100 %

Top

Top

2 Contents

2.1 Meeting Outlines

  1. 27-07 Introduction to Functional Programming in Oz
  2. 30-07 Referential Transparency; Tail Recursion
  3. 03-08 Programming with Lists, Higher-Order Programming
  4. 06-08 Laziness
  5. 10-08 Declarative Sequential Model
  6. 13-08 Lexical Scoping, Bind
  7. 17-08 Closures, procedure call
  8. 20-08 procedure call: call-by-reference (contd.), Pattern Matching
  9. 24-08 Unification and entailment
  10. 27-08 Extending the model with exceptions
  11. 31-08 Untyped \(\lambda\)-calculus - \(\alpha\), \(\beta\), \(\eta\) rules;
  12. 03-09 substitution as evaluation; Church Numerals
  13. 07-09 Lists; Y combinator
  14. 10-09 Recursion using Y combinator
  15. 21-09 Declarative Concurrency: Threads
  16. 24-09: Declarative concurrency: Threads (contd.)
  17. 28-09: Programming with streams
  18. 01-10: Programming with streams (contd.)
  19. 05-10: Laziness: semantics of triggers.
  20. 08-10: Message Passing Concurrency
  21. 12-10: Hectic Introduction to Erlang
  22. 15-10: Message passing in Erlang
  23. 26-10: Introduction to Ruby Some example code.
  24. 29-10: Loops, functions in Ruby. Introduction to objects.
  25. 02-11: Classes versus objects, inheritance in ruby [comparison with self]
  26. 05-11: Inheritance in Ruby (contd.)
  27. 09-11: Type inference in the typed λ-calculus
  • Midsem

Top

2.2 Common Errors in Programming

  1. Mozart
  2. Ruby

Top

3 Software

  1. GNU/Emacs

    1.1 An introductory video. 1.2 Hack Emacs! - modifying and customizing emacs. 1.3 Slightly advanced video tutorials.

  2. Mozart/Oz Install also the 32 bit Tcl/Tk Version 8.5!

    2.1 Installation Instructions

Top

4 Homeworks

  1. Homework 1
  2. Homework 2, due September 12, 2015. Files Unify.oz and ProcessRecords.oz Also, please read the API documentation. Here are some Examples.
  3. Homework 2, Part 2. Due September 28, 2015. Update (September 28, 2015): Unify.oz v3.1 (use with caution!)
  4. Homework 3, Due on October 29, 2015.

5 References

5.2 Lambda calculus

  1. Gabriel, Richard P. The Why of Y, circa 1980s.

Top

5.3 Smalltalk

  1. Kay, Alan. The Early History of Smalltalk, 1993.

5.4 Erlang

  1. Learn You Some Erlang!
  2. Armstrong, J. Virding, R., Wikström, C. and Williams, M. Concurrent Programming in Erlang
  3. Armstrong, J. Faults, Scaling and Erlang Concurrency - Stanford Seminar.
  4. Armstrong, J. The How and Why of Things Fit Together.

Top

5.4 General Reading

  1. Wadler, Philip, Why No One Uses Functional Languages, 1998.

    Myths and Realities of functional Languages. Emphasizes the need for popular applications written in functional languages.

  2. Hughes, John. Why Functional Programming Matters, 1984.

    In addition to "referential transparency" and the lack of mutable state, the article explains how functional programs modularize better than imperative ones, because of two new glues - higher order functions and lazy evaluation.

  3. van Roy, Peter. Programming Paradigms for Dummies: What Every Programmer Should Know. (2009?)

    Another version of the first chapter of the textbook. Can be read independently.

  4. Stratchey, Christopher. Fundamental Concepts in Programming Languages

    An influential, informative set of lecture notes.

  5. Moseley, Ben and Marks, Peter. Out of the Tar Pit

    Argues why mutable state sucks.

  6. Graham, Paul. Roots of Lisp, 2001.

    Explains what makes Lisp different

  7. Stallman, Richard. My Lisp Experiences and the Development of GNU Emacs, 2002.

    Explains the balance of C code and Emacs Lisp code in the design of emacs

  8. John McCarthy Interview, 2008.
  9. Landin, P. J. The Next 700 Programming Languages
  10. Landin, P. J. Correspondence between ALGOL 60 and Church's Lambda Notation, part I
  11. Landin, P. J. Correspondence between ALGOL 60 and Church's Lambda Notation, part II

    Explains how imperative languages and control constructs relate to \(\lambda\) calculus.

6 Some Quotes

Simple things should be simple. Complex things should be possible. - Alan Kay on design

Actually I made up the term object-oriented, and I can tell you I did not have C++ in mind. - Alan Kay

8: A programming language is low level when its programs require attention to the irrelevant. - Alan J. Perlis

19: A language that doesn't affect the way you think about programming, is not worth knowing. - Alan J. Perlis

Top


Date: 2015-09-08 21:03:27 India Standard Time

Author: Satyadev Nandakumar

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0