# Programming Language Design Final Report To finish your final report, you have 2 choices: * Summarize and comments on one of listed paper * Implement a programming project and write a short report Please submit your report before 2020/01/01 23:55 and follow the format listed below. ## report format * PDF file, naming it in the format like `A1-107525008.pdf` where `A1` meaning the 1st paper in A. * A4 paper, 1 or 2 pages * one/two column are both acceptable. * font: 標楷體(Chinese)/Times New Roman(English) * font size is 10pt. * line spacing is single line (1x line). * margin: 1.5inch on each side # A. Paper Summarizing and Commenting Pick one paper from the list below, summarize the picked one and write down your summary and comments. 1. [Lightweight Modular Staging: A Pragmatic Approach to Runtime Code Generation and Compiled DSLs](https://www.researchgate.net/publication/45581394_Lightweight_Modular_Staging_A_Pragmatic_Approach_to_Runtime_Code_Generation_and_Compiled_DSLs) 2. [Data exploration through dot-driven development](http://drops.dagstuhl.de/opus/volltexte/2017/7261/pdf/LIPIcs-ECOOP-2017-21.pdf) 3. [Aspect-oriented programming](https://www.cs.ubc.ca/~gregor/papers/kiczales-ECOOP1997-AOP.pdf) 4. [One VM to Rule Them All](http://lafo.ssw.uni-linz.ac.at/papers/2013_Onward_OneVMToRuleThemAll.pdf) 5. [Traits: Composable Units of Behavior](http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf) Please note that simply copy-translate-paste from article won't get any score. # B. Programming Project Please also submit your source code with your report. ## 1 - Rational Arithmetic Evaluation In this assignment, you are asked to implement a arithmetic evaluator with rational numbers in Haskell. Minimal requirements: * Able to do add/subtract/multiply/divide computations on rational numbers. * Print the result in simplified form * Store rational number as two integers(numerator and denominator) instead of float numbers. Example: * `(1%2) + (3%4) * (5%6) - (2%1) / (1%2)` will evaluates to `(-23) % 8` where `(a%b)` means $\frac{a}{b}$ * `(1%1) / (2%0)` will report a "divide by zero" error Please explain your design in the report, for example: * Overview of your code * Data Structures you defined * Idioms or Design Patterns you used * ...