Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.13 KB | None | 0 0
  1. #|
  2. TESTS:
  3.  
  4. ; int objects evaluate to themselves, not the Scheme ints they contain
  5. > (eval-prog (I 0))
  6. #<int>
  7. > (int-num (eval-prog (I 0)))
  8. 0
  9. ; non-nested add evaluation
  10. > (int-num (eval-prog (add (I 1) (I 2))))
  11. 3
  12. ; nested adds
  13. > (int-num (eval-prog (add (add (I 0)
  14. (I 1))
  15. (I 2))))
  16. 3
  17.  
  18. ; function creation and application
  19. > (int-num (eval-prog (make-app (make-fun #f "n"
  20. (add (I 1) (V "n")))
  21. (I 2))))
  22. 3
  23.  
  24. ; testing mlet and list creation:
  25. > (int-num (eval-prog (make-mlet "lst" (make-apair (I 0) (make-apair (I 1) (make-aunit)))
  26. (make-fst (make-snd (V "lst"))))))
  27. 1
  28.  
  29. ; Testing support for recursion with a silly recursive adder function:
  30. > (define (recadd n)
  31. (if (> n 10)
  32. n
  33. (+ (recadd (+ n 1)) (recadd (+ n 2)))))
  34. > (recadd 4)
  35. 387
  36. > (define recadd-MUPL (make-fun "recadd-MUPL" "n"
  37. (make-ifgreater (V "n") (I 10)
  38. (V "n")
  39. (make-add (make-app (V "recadd-MUPL") (make-add (V "n") (I 1)))
  40. (make-app (V "recadd-MUPL") (make-add (V "n") (I 2)))))))
  41. > (int-num (eval-prog (app recadd-MUPL (I 4))))
  42. 387
  43.  
  44. ; testing mlet* over an add expression, with bindings that have to be made sequentially
  45. > (define bindings (make-apair (make-apair "a" (I 1))
  46. (make-apair (make-apair "b" (make-add (V "a") (I 1)))
  47. (make-aunit))))
  48. > (int-num (eval-prog (mlet*2 bindings
  49. (make-add (V "a") (V "b")))))
  50. 3
  51.  
  52. ; list length function
  53. > (int-num (eval-prog (make-app (make-fun "len" "lst"
  54. (make-ifaunit (V "lst")
  55. (I 0)
  56. (make-add (I 1)
  57. (make-app (V "len") (make-snd (V "lst"))))))
  58. (make-apair (I 1) (make-apair (I 2) (make-aunit))))))
  59. 2
  60.  
  61. ; currying -- equivalent to (((lambda (n) (lambda (m) (+ n m))) 1) 2)
  62. > (int-num (eval-prog (make-app (make-app (make-fun #f "n"
  63. (make-fun #f "m"
  64. (make-add (V "n") (V "m"))))
  65. (I 1))
  66. (I 2))))
  67. 3
  68.  
  69. ; using mupl-map
  70. > (muplintlist-to-list (eval-prog (make-app (make-app mupl-map (fun #f "n"
  71. (make-add (V "n") (I 1))))
  72. (make-apair (I 1) (make-apair (I 2) (make-aunit))))))
  73. (2 3)
  74.  
  75. ; equivalent to the above, using mupl-mapAddN
  76. > (muplintlist-to-list (eval-prog (make-app (make-app mupl-mapAddN (I 1))
  77. (make-apair (I 1) (make-apair (I 2) (make-aunit))))))
  78. (2 3)
  79.  
  80. |#
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement