![]() |
![]() |
|
COMS W4995 003 Parallel Functional Programming Fall 2019 |
Class meets Mondays, Wednesdays 5:40 - 6:55 PM in 417 Mathematics.
Name | Office hours | Location | |
---|---|---|---|
Prof. Stephen A. Edwards | sedwards@cs.columbia.edu | By appt. | 462 CSB |
John Hui | jzh2106@columbia.edu | 2-4 Mondays | TA Room, 1st Floor Mudd |
Amanda Liu | al3623@columbia.edu | 2-4 Tuesdays | TA Room, 1st Floor Mudd |
Pierre Tholoniat | pt2537@columbia.edu | 10-12 Wednesdays | TA Room, 1st Floor Mudd |
Prerequisites: COMS 3157 Advanced Programming or the equivalent. Knowledge of at least one programming language and related development tools/environments required. Functional programming experience not required.
Functional programming in Haskell, with an emphasis on parallel programs.
The goal of this class is to introduce you to the functional programming paradigm. You will learn to code in Haskell; this experience will also prepare you to code in other functional languages. The first half the the class will cover basic (single-threaded) functional programming; the second half will cover how to code parallel programs in a functional setting.
Date | Lecture | Notes | Due |
---|---|---|---|
Wed Sep 4 | Introduction Basic Haskell |
![]() ![]() |
|
Mon Sep 9 | Types and Typeclasses |
![]() |
|
Wed Sep 11 | Basic Function Definitions |
![]() |
|
Mon Sep 16 | |||
Wed Sep 18 | Recursion and Higher Order Functions |
![]() |
|
Mon Sep 23 | |||
Wed Sep 25 | Using and Defining Modules |
![]() |
Homework 1
.hs file![]() |
Mon Sep 30 | |||
Wed Oct 2 | User-Defined Types |
![]() |
|
Mon Oct 7 | |||
Wed Oct 9 | I/O |
![]() |
|
Fri Oct 11 | (no lecture; turn in homework) |
Homework 2
.hs file![]() |
|
Mon Oct 14 | (No lecture) |
||
Wed Oct 16 | (No lecture) |
||
Mon Oct 21 | |||
Wed Oct 23 | Functors |
![]() |
|
Fri Oct 25 | (no lecture; turn in homework) |
Homework 3
.zip file![]() |
|
Mon Oct 28 | |||
Wed Oct 30 | Monads |
![]() |
|
Mon Nov 4 | Election Day Holiday | ||
Wed Nov 6 | |||
Mon Nov 11 | |||
Wed Nov 13 | |||
Mon Nov 18 | |||
Wed Nov 20 | Lazy and Parallel Evaluation |
![]() |
|
Fri Nov 22 | (no lecture; turn in homework) |
Homework 4
.zip file![]() |
|
Mon Nov 25 | |||
Wed Nov 27 | Thanksgiving Holiday | ||
Mon Dec 2 | Strategies |
![]() |
|
Wed Dec 4 | |||
Mon Dec 9 | The Par Monad |
![]() |
|
Wed Dec 18 | (no lecture) |
Project report and code |
random-graphs:
![]() ![]() ![]() Dhruv Singh |
2048-puzzle1:
(AL)![]() ![]() ![]() Tri Do |
freecel:
(AL)![]() ![]() ![]() Joe Huang |
crossword:
(AL)![]() ![]() ![]() Rose Huang and Biqing Qiu |
3-partition:
(AL)![]() ![]() ![]() Hyeon-U Kang |
suicide-chess:
(AL)![]() ![]() ![]() Alexander Khoma and Jakwanul Safin |
othello:
(AL)![]() ![]() ![]() Kaiji Lu |
2048-puzzle2:
(AL)![]() ![]() ![]() Colin Brown and Jonathan Rich |
boggle:
(AL)![]() ![]() ![]() Khyber Sen |
othello-2:
(AL)![]() ![]() ![]() Chengtian Xu |
gomoku:
(AL)![]() ![]() ![]() Zheng Yao and Qinhan Zhou |
cellular-fluid:
(JH)![]() ![]() ![]() Rongcui Dong |
HipgRap:
(JH)![]() ![]() ![]() Bicheng Gao and Kangwei Ling |
ray-tracer:
(JH)![]() ![]() ![]() Garrison Grogan |
n-body:
(JH)![]() ![]() ![]() Kundan Guha |
ray-tracer2:
(JH)![]() ![]() ![]() Jiakang Guo |
polygon-rendering:
(JH)![]() ![]() ![]() Joshua Learn |
particles:
(JH)![]() ![]() ![]() Morgan Navarro |
sph:
(JH)![]() ![]() ![]() ![]() Zachary Schuermann |
r-tree:
(JH)![]() ![]() ![]() Samurdha Jayasinghe Mudi and Ge Wang |
mandelbrot:
(JH)![]() ![]() ![]() Amanda Liu |
D*-Lite:
(PT)![]() ![]() ![]() Eric Chase |
auto-complete:
(PT)![]() ![]() ![]() Siwei Chen |
n-grams:
(PT)![]() ![]() ![]() ![]() Dave Epstein |
ALife:
(PT)![]() ![]() ![]() Alex Gajewski |
word-break-ii:
(PT)![]() ![]() ![]() Michelle Mao and Hana Mizuta |
knapsack:
(PT)![]() ![]() ![]() Shaohua Tang and Jing Wang |
knapsack-2:
(PT)![]() ![]() ![]() Jt Timpanaro |
robbie:
(PT)![]() ![]() ![]() Eli Whitehouse |
collaborative-filtering:
(PT)![]() ![]() ![]() ZHOU ZHUANG |
auto-suggest:
(PT)![]() ![]() ![]() Tomer Zwi |
graph-coloring:
(SE)![]() ![]() ![]() Ishan Guru and Haneen Mohammed |
sodoku:
(SE)![]() ![]() ![]() Jiaheng He |
map-reduce1:
(SE)![]() ![]() ![]() Yimin Hu |
mutual-friends:
(SE)![]() ![]() ![]() Yefri Gaitan and Ecenaz Ozmen |
kenken:
(SE)![]() ![]() ![]() Harry Smith |
map-reduce2:
(SE)![]() ![]() ![]() Jian Song and Ziao Wang |
map-reduce3:
(SE)![]() ![]() ![]() Sambhav Anand and Kanishk Vashisht |
topo-sort:
(SE)![]() ![]() ![]() Raymond Li and Wendy Wang |
pagerank:
(SE)![]() ![]() ![]() ![]() Zefeng Liu and Xi Yang |
My favorites
The project should be a parallel implementation of some algorithm/technique in Haskell. Marlow parallelizes a Sudoku solver and a K-means clustering algorithm in his book; these are baseline projects. I am looking for something more sophisticated than these, but not dramatically more complicated.
Do the project alone or in pairs. List all your names and UNIs in the proposal and final report
There are three deliverables:
Strive for a little well-written, well-tested program that handles everything gracefully rather than a large, feature-filled system. If you're short on time, drop a feature in preference to improving the code you have.
Other project ideas include any sort of map/reduce application, graphics rendering, physical simulation (e.g., particles), parallel grep or word count, a Boolean satisfiability solver, or your favorite NP-complete problem. If your program is algorithmically simple (e.g., word count or word frequency count), it need to scale to huge inputs. AI (as opposed to machine learning) applications, such as game playing algorithms, are generally a good idea. Algorithms that have a lot of matrix multiplication at their core (e.g., deep learning) are less suitable.
Feel free to ask the instructor or TAs for project advice or criticism