Commit Graph

219 Commits

Author SHA1 Message Date
Oliver Payne 1d4447ad2b Add missing file for exercise 3.43 2023-08-13 22:32:15 +01:00
Oliver Payne c6ccffce8a Add missing code for 4.1 2023-08-13 22:30:21 +01:00
Oliver Payne e98e2cb924 Add missing files from previous exercises 2023-08-13 22:29:19 +01:00
Oliver Payne 7b095554f4 Add exercise 4.27 2023-08-13 22:28:06 +01:00
Oliver Payne 6e82d7bbf7 Add new primitive procedures 2023-08-12 23:13:36 +01:00
Oliver Payne 2f52190ebb Add lazy evaluator
Slightly modified in structure from the book, but otherwise the same
2023-08-12 23:13:04 +01:00
Oliver Payne 67e6824403 Move user-print into common 2023-08-12 23:12:09 +01:00
Oliver Payne 4edf1c01e1 Fix refactor of eval special forms 2023-08-11 22:22:43 +01:00
Oliver Payne daac72e455 Factor out special forms into a separate module 2023-08-07 23:02:31 +01:00
Oliver Payne 2dea1e7d2b Merge branch 'interpreter-refactor' 2023-08-04 22:48:46 +01:00
Oliver Payne 0dfb6116df Tidy up timing tests 2023-07-31 23:05:36 +01:00
Oliver Payne 3f445b0a16 Move scanning out to happen before analyzing
This also requires a move for the non-analyzing evaluator (it was
probably not in the best place before anyway).  Now scanning out works
correctly for both.
2023-07-31 22:51:20 +01:00
Oliver Payne ea746cd02a Add unit tests and timing tests 2023-07-26 23:03:25 +01:00
Oliver Payne 883c967338 Move test-eval.rkt to mceval directory 2023-07-26 22:28:08 +01:00
Oliver Payne b349000cc1 Fix eval-program 2023-07-26 22:27:06 +01:00
Oliver Payne 290ba35045 Add analyzing evaluator to mceval directory
Refactored to use common code with dd-mceval.
2023-07-25 23:00:47 +01:00
Oliver Payne 0d79c2098a Move interpreter procedures to module level
Now, it should be possible to require each interpreter module.
2023-07-24 23:03:34 +01:00
Oliver Payne 2f57ff2818 Add show method to dispatch-table 2023-07-24 22:58:22 +01:00
Oliver Payne 4ad1e5516b Move eval and related procedures into mce-evaluator procecure 2023-07-15 22:11:18 +01:00
Oliver Payne 807fdbaeda Merge remote-tracking branch 'origin/interpreter-refactor' into interpreter-refactor
Conflicts:
	mceval/dd-mceval.rkt
2023-07-14 22:31:53 +01:00
Oliver Payne 15ba90d1e0 Move scanning out procedure-body into syntax.rkt 2023-07-13 23:00:45 +01:00
Oliver Payne 9ea8c5c8ca Add common.rkt 2023-07-13 22:30:15 +01:00
Oliver Payne e2d8608492 Tidy up redundant comments and requires 2023-07-03 23:08:15 +01:00
Oliver Payne b517f8c9aa More re-arranging
All code now loads OK.  Still need to extend initial environment to
include built-in procedures.
2023-06-24 23:04:41 +01:00
Oliver Payne 8453df4563 Move dd-mceval to mveval directory 2023-06-10 22:50:08 +01:00
Oliver Payne 47be978c57 More reorganising of interpreter code 2023-06-09 23:06:54 +01:00
Oliver Payne edb09836b3 Start reorganising interpreter 2023-06-08 23:00:30 +01:00
Oliver Payne e48f428e96 Complete up to 4.26 2023-06-05 22:27:18 +01:00
Oliver Payne d767fcb1a0 Implement 4.24
This redefines eval in each of the interpreters to be a specific
version.
2023-05-18 22:35:01 +01:00
Oliver Payne 84260132b0 Complete exercise 4.23 2023-05-17 22:53:05 +01:00
Oliver Payne 0cfc6a09aa Implement let in the analysing interpreter (exercise 4.22)
Base the analysing interpreter on the data driven interpreter instead
of the standard ch4 one, as there is more implemented there already.
Bypass the scanning out of internal definitions for simplicity.
2023-05-11 22:55:06 +01:00
Oliver Payne cce00f9a9c Add racket version of analyzing mceval 2023-05-08 20:17:05 +01:00
Oliver Payne 42f5cad05d Completed to exercise 4.21 2023-05-05 23:02:42 +01:00
Oliver Payne 45062e6f9d Complete exercise 4.19 2023-05-05 16:45:41 +01:00
Oliver Payne a5ba2798b2 Complete exercise 4.18 2023-05-05 16:33:15 +01:00
Oliver Payne cb85477c2b Complete exercise 4.17 2023-05-04 22:57:56 +01:00
Oliver Payne 288e81e034 Complete exercise 4.16 (scanning out internal definitions) 2023-05-03 22:46:24 +01:00
Oliver Payne 79ca3ce298 Fix bug in named-let? predicate
This was falsely identifying (let () 1) as a named let.
2023-05-03 22:44:23 +01:00
Oliver Payne 39ba66ba44 First cut of scan-out define algorithm
I think this can be done with a single iteration.
2023-04-30 23:03:37 +01:00
Oliver Payne 37d67d1e3d Complete exercise 4.15 2023-04-28 22:58:50 +01:00
Oliver Payne 543a06efa2 Add make-unbound! (Exercise 4.13) 2023-04-27 19:54:58 +01:00
Oliver Payne c6af81de5e First cut of make-unbound! for Exercise 4.13
This only removes a single binding in the environment.
2023-04-26 23:05:48 +01:00
Oliver Payne 64510a80f0 Abstract iteration from variable operations (exercise 4.12) 2023-04-26 18:55:31 +01:00
Oliver Payne e0b7b9490c Exercise 4.11: change frame representation to list of pairs 2023-04-18 22:56:43 +01:00
Oliver Payne 1784534c39 Add implementation of for (Exercise 4.9) 2023-04-11 22:32:56 +01:00
Oliver Payne 658d65b7a4 Fix dispatch table entry for begin 2023-04-11 22:02:23 +01:00
Oliver Payne aa58650354 Complete exercise 4.8 (named let) 2023-04-10 22:25:35 +01:00
Oliver Payne 0e716bd0cb Complete exercise 4.7 (let*) 2023-04-02 21:07:25 +01:00
Oliver Payne ada3271a84 Complete 4.6: let derived form 2023-04-02 20:03:57 +01:00
Oliver Payne 2e7c3dd240 Tidy ups for and / or 2023-04-02 20:03:12 +01:00