Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use "./test_util.sml";
- use "./ex5.sml";
- (* -------------------- intbseq --------------- *)
- fun composeNTimes f 1 = f
- | composeNTimes f n = f o (composeNTimes f (n-1));
- val a = intbseq 2;
- REQUIRE ("intbseq // staff #1") ((bHead a) = 2);
- val a = bForward a;
- REQUIRE ("intbseq // staff #2") ((bHead a) = 3);
- val a = bForward a;
- REQUIRE ("intbseq // staff #3") ((bHead a) = 4);
- val a = bBack a;
- REQUIRE ("intbseq // staff #4") ((bHead a) = 3);
- val a = bBack a;
- REQUIRE ("intbseq // staff #5") ((bHead a) = 2);
- val a = bBack a;
- REQUIRE ("intbseq // staff #6") ((bHead a) = 1);
- val a = bBack a;
- REQUIRE ("intbseq // staff #7") ((bHead a) = 0);
- val a = bBack a;
- REQUIRE ("intbseq // staff #8") ((bHead a) = ~1);
- val a = intbseq 10;
- REQUIRE ("intbseq // #1") ((bHead a) = 10);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("intbseq // #2") ((bHead a) = 20);
- val a = (composeNTimes bForward 100) a;
- REQUIRE ("intbseq // #3") ((bHead a) = 120);
- val a = (composeNTimes bBack 100) a;
- REQUIRE ("intbseq // #4") ((bHead a) = 20);
- val a = (composeNTimes bBack 5) a;
- REQUIRE ("intbseq // #5") ((bHead a) = 15);
- (* -------------------- bmap ---------------- *)
- val a = bmap (fn x =>x*x) (intbseq 2);
- REQUIRE ("bmap // staff #1") ((bHead a) = 4);
- val a = bForward a;
- REQUIRE ("bmap // staff #2") ((bHead a) = 9);
- val a = bForward a;
- REQUIRE ("bmap // staff #3") ((bHead a) = 16);
- val a = bBack a;
- REQUIRE ("bmap // staff #4") ((bHead a) = 9);
- val a = bBack a;
- REQUIRE ("bmap // staff #5") ((bHead a) = 4);
- val a = bBack a;
- REQUIRE ("bmap // staff #6") ((bHead a) = 1);
- val a = bBack a;
- REQUIRE ("bmap // staff #7") ((bHead a) = 0);
- val a = bBack a;
- REQUIRE ("bmap // staff #8") ((bHead a) = 1);
- val a = bBack a;
- REQUIRE ("bmap // staff #9") ((bHead a) = 4);
- val a = bmap (fn x => x div 2) (intbseq 0);
- REQUIRE ("bmap // #1") ((bHead a)=0);
- val a = bForward a;
- REQUIRE ("bmap // #2") ((bHead a)=0);
- val a = bForward a;
- REQUIRE ("bmap // #3") ((bHead a)=1);
- val a = bForward a;
- REQUIRE ("bmap // #4") ((bHead a)=1);
- val a = bForward a;
- REQUIRE ("bmap // #5") ((bHead a)=2);
- val a = bBack a;
- REQUIRE ("bmap // #6") ((bHead a)=1);
- val a = bForward a;
- REQUIRE ("bmap // #7") ((bHead a)=2);
- val a = bBack a;
- REQUIRE ("bmap // #8") ((bHead a)=1);
- val a = bBack a;
- REQUIRE ("bmap // #9") ((bHead a)=1);
- val a = bBack a;
- REQUIRE ("bmap // #10") ((bHead a)=0);
- val a = bBack a;
- REQUIRE ("bmap // #11") ((bHead a)=0);
- val a = bBack a;
- REQUIRE ("bmap // #12") ((bHead a)= (~1));
- val a = bmap (fn x => x*2) (intbseq 0);
- REQUIRE ("bmap // #13") ((bHead a)=0);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("bmap // #14") ((bHead a)=20);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("bmap // #15") ((bHead a)=40);
- val a = (composeNTimes bBack 20) a;
- REQUIRE ("bmap // #16") ((bHead a)=0);
- (* -------------------- bfilter ---------------- *)
- val a = bfilter (fn x => x mod 2 = 0) Back (intbseq 2);
- REQUIRE ("bfilter // staff #1") ((bHead a)=2);
- val a = bForward a;
- REQUIRE ("bfilter // staff #2") ((bHead a)=4);
- val a = bForward a;
- REQUIRE ("bfilter // staff #3") ((bHead a)=6);
- val a = bBack a;
- REQUIRE ("bfilter // staff #4") ((bHead a)=4);
- val a = bBack a;
- REQUIRE ("bfilter // staff #5") ((bHead a)=2);
- val a = bBack a;
- REQUIRE ("bfilter // staff #6") ((bHead a)=0);
- val a = bBack a;
- REQUIRE ("bfilter // staff #7") ((bHead a)=(~2));
- val a = bfilter (fn x => x mod 2 = 0) Back (intbseq 1);
- REQUIRE ("bfilter // staff #8") ((bHead a)=0);
- val a= bfilter (fn x => x mod 2 = 0) Forward (intbseq 1);
- REQUIRE ("bfilter // staff #9") ((bHead a)=2);
- fun isPrime x = let
- fun aux x 1 = true
- | aux x m = if (x mod m = 0) then false else (aux x (m-1));
- in (aux x (Real.ceil (Math.sqrt (real x)))) end;
- val a = bfilter (fn x => (isPrime x)) Back (intbseq 11);
- REQUIRE ("bfilter // #1") ((bHead a)=11);
- val a = bForward a;
- REQUIRE ("bfilter // #2") ((bHead a)=13);
- val a = bForward a;
- REQUIRE ("bfilter // #3") ((bHead a)=17);
- val a = bForward a;
- REQUIRE ("bfilter // #4") ((bHead a)=19);
- val a = bBack a;
- REQUIRE ("bfilter // #5") ((bHead a)=17);
- val a = bBack a;
- REQUIRE ("bfilter // #6") ((bHead a)=13);
- val a = bBack a;
- REQUIRE ("bfilter // #7") ((bHead a)=11);
- val a = bForward a;
- REQUIRE ("bfilter // #8") ((bHead a)=13);
- val a = bForward (bForward (bForward a));
- REQUIRE ("bfilter // #9") ((bHead a)=23);
- val a = bForward (bForward (bForward a));
- REQUIRE ("bfilter // #10") ((bHead a)=37);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("bfilter // #11") ((bHead a)=79);
- val a = (composeNTimes bForward 20) a;
- REQUIRE ("bfilter // #12") ((bHead a)=181);
- val a = (composeNTimes bBack 30) a;
- REQUIRE ("bfilter // #13") ((bHead a)=37);
- (* -------------------- seq2bseq ---------------- *)
- fun from(x) = Cons(x, fn()=>from(x+1));
- fun downfrom(x) = Cons(x, fn()=>downfrom(x-1));
- val a = seq2bseq (downfrom ~1) (from 0);
- REQUIRE("seq2bseq // staff #1") ((bHead a)=0);
- val a = bForward a;
- REQUIRE("seq2bseq // staff #2") ((bHead a)=1);
- val a = bBack a;
- REQUIRE("seq2bseq // staff #3") ((bHead a)=0);
- val a = bBack a;
- REQUIRE("seq2bseq // staff #4") ((bHead a)=(~1));
- val a = seq2bseq (downfrom ~1) (from 0);
- REQUIRE ("seq2bseq // #1") ((bHead a)=0);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("seq2bseq // #2") ((bHead a)=10);
- val a = (composeNTimes bBack 10) a;
- REQUIRE ("seq2bseq // #3") ((bHead a)=0);
- fun bseq2seq b Forward = Cons((bHead b), fn () => (bseq2seq (bForward b) Forward))
- | bseq2seq b Back = Cons((bHead b), fn () => (bseq2seq (bBack b) Back));
- val positivePrimesOver11 = bseq2seq (bfilter (fn x => (isPrime x)) Back (intbseq 11)) Forward;
- val oddsUnder11 = bseq2seq (bfilter (fn x => (x mod 2 = 1)) Back (intbseq 10)) Back;
- val a = seq2bseq oddsUnder11 positivePrimesOver11;
- REQUIRE ("seq2bseq // #4") ((bHead a)=11);
- val a = bForward a;
- REQUIRE ("seq2bseq // #5") ((bHead a)=13);
- val a = bBack (bBack a);
- REQUIRE ("seq2bseq // #6") ((bHead a)=9);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("seq2bseq // #7") ((bHead a)=43);
- val a = (composeNTimes bBack 9) a;
- REQUIRE ("seq2bseq // #8") ((bHead a)=11);
- val a = (composeNTimes bBack 4) a;
- REQUIRE ("seq2bseq // #9") ((bHead a)=3);
- (* -------------------- bSeqJump ---------------- *)
- val a = bSeqJump (intbseq 0) 3;
- REQUIRE ("bSeqJump // staff #1") ((bHead a) = 0);
- val a = bForward a;
- REQUIRE ("bSeqJump // staff #2") ((bHead a) = 3);
- val a = bForward a;
- REQUIRE ("bSeqJump // staff #3") ((bHead a) = 6);
- val a = bBack a;
- REQUIRE ("bSeqJump // staff #4") ((bHead a) = 3);
- val a = bBack a;
- REQUIRE ("bSeqJump // staff #5") ((bHead a) = 0);
- val a = bBack a;
- REQUIRE ("bSeqJump // staff #6") ((bHead a) = (~3));
- val a = bSeqJump (bfilter (fn x => (isPrime x)) Back (intbseq 3)) 3;
- REQUIRE ("bSeqJump // #1") ((bHead a) = 3);
- val a = bForward a;
- REQUIRE ("bSeqJump // #2") ((bHead a) = 11);
- val a = bForward a;
- REQUIRE ("bSeqJump // #3") ((bHead a) = 19);
- val a = bBack (bBack a);
- REQUIRE ("bSeqJump // #4") ((bHead a) = 3);
- val a = bSeqJump (bfilter (fn x => x mod 2 = 0) Back (intbseq 0)) 3;
- REQUIRE ("bSeqJump // #5") ((bHead a) = 0);
- val a = (composeNTimes bForward 10) a;
- REQUIRE ("bSeqJump // #6") ((bHead a) = 60);
- val a = (composeNTimes bBack 10) a;
- REQUIRE ("bSeqJump // #7") ((bHead a) = 0);
- val a = (composeNTimes bForward 50) a;
- REQUIRE ("bSeqJump // #8") ((bHead a) = 300);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement