This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
cs330_f2016:labhppint [2016/10/14 20:38] dcostello |
cs330_f2016:labhppint [2021/06/30 23:42] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | =====BYU CS330 - Concepts of Programming Languages - HP Int Lab===== | ||
+ | |||
====Objective:==== | ====Objective:==== | ||
Line 29: | Line 31: | ||
The primary deliverable for this lab is a new Julia module. Your module should export ''parse'', ''calc'' ''analyze'' functions, and three return types, ''NumVal'', ''ClosureVal'', and ''MatrixVal''. | The primary deliverable for this lab is a new Julia module. Your module should export ''parse'', ''calc'' ''analyze'' functions, and three return types, ''NumVal'', ''ClosureVal'', and ''MatrixVal''. | ||
- | Your module should be able to do everything that the three previous interpreters. You are welcome to examine the code we developed in class. The ''CI8.jl'' module is available on LearningSuite, under "Content -> Julia -> High Performance Primitives". | + | Your module should be able to do everything that the three previous interpreters could do. You are welcome to examine the code we developed in class. The ''CI6.jl'' module is available on LearningSuite, under "Content -> Julia -> High Performance Primitives". |
Please name your module ''HPInt''. | Please name your module ''HPInt''. | ||
Line 53: | Line 55: | ||
| (/ <OWL> <OWL>) | | (/ <OWL> <OWL>) | ||
| (mod <OWL> <OWL>) | | (mod <OWL> <OWL>) | ||
- | | (collatz <OWL>) | + | | (- <OWL>) |
- | | (- <OWL>) | + | | (collatz <OWL>) # Only a NumVal version required for collatz |
| id | | id | ||
| (if0 <OWL> <OWL> <OWL>) | | (if0 <OWL> <OWL> <OWL>) | ||
Line 96: | Line 98: | ||
- The ''min,max,+,-,/,*'' functions all must work with any combination of ''NumVal'' and ''MatrixVal''s. | - The ''min,max,+,-,/,*'' functions all must work with any combination of ''NumVal'' and ''MatrixVal''s. | ||
- | - Remember that when multiplying a MatrixVal by a MatrixVal, we want to use the ''.*'' operation (element-wise matrix multiply) instead of ''*'' (matrix-matrix multiply). | + | - Remember that when multiplying a MatrixVal by a MatrixVal, we want to use the ''.*'' operation (element-wise matrix multiply) instead of ''*'' (matrix-matrix multiply). |
---- | ---- | ||
Line 113: | Line 115: | ||
---- | ---- | ||
====Hints:==== | ====Hints:==== | ||
+ | |||
+ | To verify that your matrix code is working properly, you can run the test cases described in {{ :cs330_f2016:cattestcases.pdf |}} on {{:cs330_f2016:cat_256.png?linkonly|}} | ||
Once all is said and done, the following program: | Once all is said and done, the following program: | ||
<code lisp> | <code lisp> | ||
- | (with ( (base_img (render_text "Hello" 25 100)) | + | (with ((base_img (render_text "Hello" 25 100)) |
- | (swirl (simple_load "/Users/wingated/Desktop/swirl_256.png")) ) | + | (swirl (simple_load "/Users/wingated/Desktop/swirl_256.png"))) |
- | (with ( (ds (drop_shadow base_img)) ) | + | (with ((ds (drop_shadow base_img))) |
- | (with ( (tmp4 (+ (* (+ (min ds base_img) (- 1 base_img)) base_img) (* (- 1 base_img) swirl) )) ) | + | (with ((tmp4 (+ (* (+ (min ds base_img) (- 1 base_img)) base_img) (* (- 1 base_img) swirl) ))) |
- | (with ( (tmp5 (- 1 (emboss tmp4))) | + | (with ((tmp5 (- 1 (emboss tmp4))) |
- | (base_img2 (render_text "world!" 5 200)) ) | + | (base_img2 (render_text "world!" 5 200))) |
- | (with ( (is (inner_shadow base_img2)) ) | + | (with ((is (inner_shadow base_img2))) |
- | (with ( (tmp6 (max base_img2 (* (- 1 base_img2) is) )) ) | + | (with ((tmp6 (max base_img2 (* (- 1 base_img2) is) ))) |
(with ( (output (min tmp5 tmp6 )) ) | (with ( (output (min tmp5 tmp6 )) ) | ||
(simple_save output "output.png") | (simple_save output "output.png") | ||
Line 134: | Line 138: | ||
) | ) | ||
) | ) | ||
+ | |||
| | ||
</code> | </code> |