hw1: init
This commit is contained in:
63
hw1/hw1.txt
Normal file
63
hw1/hw1.txt
Normal 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.
|
||||
|
||||
Reference in New Issue
Block a user