diff options
| author | 2025-02-24 18:41:14 -0500 | |
|---|---|---|
| committer | 2025-02-24 18:41:53 -0500 | |
| commit | 4a71da136915aa50e45d39b868047686123d8a3e (patch) | |
| tree | f8b99de05876b69ae06058380e98498e85490042 /lib/SAHP.scm | |
| parent | make library hierarchy (diff) | |
make library hierarchy again
Diffstat (limited to 'lib/SAHP.scm')
| -rw-r--r-- | lib/SAHP.scm | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/SAHP.scm b/lib/SAHP.scm new file mode 100644 index 0000000..3e60956 --- /dev/null +++ b/lib/SAHP.scm @@ -0,0 +1,57 @@ +#| Copyright 2024 Peter McGoron + | + | Licensed under the Apache License, Version 2.0 (the "License"); + | + | you may not use this file except in compliance with the License. + | You may obtain a copy of the License at + | + | http://www.apache.org/licenses/LICENSE-2.0 + | + | Unless required by applicable law or agreed to in writing, software + | distributed under the License is distributed on an "AS IS" BASIS, + | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + | See the License for the specific language governing permissions and + | limitations under the License. + |# + +;;; ;;;;;;;;;;;; +;;; API +;;; ;;;;;;;;;;;; + +(define (set-global-SAHP! SAHP type procedure) + (%SAHP-add-to-global/subtypes (extract-SAHP-descriptor SAHP) + type + procedure)) + +(define-syntax define-global-SAHP + (syntax-rules () + ((_ (name (type arg1) . arg-rest) body ...) + (set-global-SAHP! name + type + (lambda (arg1 . arg-rest) + body ...))))) + +(define-syntax parameterize-SAHP + (syntax-rules () + ((_ ((SAHP (type value) ...) ...) body ...) + (let ((param (SAHP-dynamic-scope-parameter (extract-SAHP-descriptor + SAHP))) + ...) + (parameterize ((param (%SAHP-set/subtypes (param) + (list type ...) + (list value ...))) + ...) + body ...))))) + +(define-syntax letrec-SAHP + (syntax-rules () + ((_ ((SAHP (type value) ...) ...) body ...) + (let ((%SAHP (extract-SAHP-descriptor SAHP)) ...) + (letrec ((SAHP (%SAHP/local-scope + %SAHP + (%SAHP-set/subtypes (SAHP-local-scope + %SAHP) + (list type ...) + (list value ...)))) + ...) + body ...))))) |
