hw1: init

This commit is contained in:
2026-02-14 19:57:27 -08:00
parent 52e7e119b6
commit 09f11f0e8b
9 changed files with 281 additions and 0 deletions

63
hw1/hw1.txt Normal file
View File

@@ -0,0 +1,63 @@
For the first assignment, we will look at how Haskell handles big numbers.
***NOTE: YOU MAY NOT CHANGE ANY TYPE SIGNATURES***
***IF YOU DO, YOU WILL GET A ZERO FOR THE ASSIGNMENT***
Consider the following Java program (available in Test.java).
public class Test {
public void main(String[] args) {
System.out.println(999999999999999999999 * 2);
}
}
You could easily calculate 999999999999999999999 * 2 with pencil and paper;
Java cannot handle it.
$ javac Test.java
Test.java:3: error: integer number too large: 999999999999999999999
System.out.println(999999999999999999999 * 2);
^
1 error
With Haskell, there is no problem:
$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 999999999999999999999 * 2
1999999999999999999998
Prelude>
So how does Haskell handle these numbers?
We will implement a simplified BigNum module to understand it better.
In our implementation, a number will be a list of "blocks" of numbers from 0-999,
stored with the least significant "block" first. So 9,073,201 will be
stored as:
[201,73,9]
Your job is to complete BigNum.hs. The breakdown of points is as follows:
* 10 points -- Complete bigAdd'
* 5 points -- Complete bigSubtract'
* 3 points -- Complete bigMultiply
* 2 points -- Complete bigPowerOf
Starter code is available on the course website.
The files include:
* BigNum.hs -- You will modify this file (only).
* Calculator.hs -- A (very) simple calculator that relies on your BigNum module.
* test.hs -- A number of test cases that use BigNum.
* input -- A number of cases that Calculator.hs should handle correctly.
* output_EXPECTED -- the expected results of calling (from the command line):
$runhaskell test.hs
$runhaskell Calculator.hs < input
Note that negative numbers are not supported, and should raise an error.
Submit BigNum.hs through Canvas.