A user-defined Scheme procedure.
| 179 | |
| 180 | # tag::PROCEDURE[] |
| 181 | class Procedure: |
| 182 | "A user-defined Scheme procedure." |
| 183 | |
| 184 | def __init__( # <1> |
| 185 | self, parms: list[Symbol], body: list[Expression], env: Environment |
| 186 | ): |
| 187 | self.parms = parms # <2> |
| 188 | self.body = body |
| 189 | self.env = env |
| 190 | |
| 191 | def __call__(self, *args: Expression) -> Any: # <3> |
| 192 | local_env = dict(zip(self.parms, args)) # <4> |
| 193 | env = Environment(local_env, self.env) # <5> |
| 194 | for exp in self.body: # <6> |
| 195 | result = evaluate(exp, env) |
| 196 | return result # <7> |
| 197 | # end::PROCEDURE[] |
| 198 | |
| 199 |