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