I imagine here a deterministic language capable of MP. I think that Scheme is deterministic. There are a few occurances of unspecified in the spec but it seems clear that are already a deterministic function of their arguments and the implementation.

Scheme is extended by defining a class of identifier which cannot be stored into. I will call the ‘constants’ here. Better yet I adopt Reese’s Scheme 48 where there is no procedure set!. A variation of lambda produces a function that closes over constant variables in the scope of its definition.


This is becoming tedious and premature. I presume a new class of function definition that sees only a class of variable in the context of its definition that denotes a manifestly immutable value. I claim that it is easy to define these. Non-Scheme like value identifiers are needed as in Scheme 48. This is a compile time check. There is a trusted primitive procedure whose behavior is (lambda (P Q) (cons (P) (Q))) where P and Q must be such functions. The real primitive is free to run P and Q on different processors. There is now no way to learn whether P finished before Q. The new language is thus deterministic.

This does not subsume all MP patterns and some problems may not find this language suitable for harnessing multiple CPUs and other forms of MP.


Recursive definition of ‘constant’ in Scheme Special rules: