ovidiu 02/01/25 15:02:50 Added: src/scratchpad/schecoon/scheme functions.scm Log: Support for functions with named arguments. Revision Changes Path 1.1 xml-cocoon2/src/scratchpad/schecoon/scheme/functions.scm Index: functions.scm =================================================================== ;; functions.scm ;; ;; Support for functions with named arguments. ;; ;; Author: Ovidiu Predescu <[EMAIL PROTECTED]> ;; Date: January 24, 2002 ;; (define-syntax function (lambda (x) (syntax-case x () ((_ (name sitemap env arg ...) body ...) (syntax (define (name sitemap env params) (let ((arg (extract-param params 'arg)) ...) body ...))))))) (define (extract-param params arg) (if (pair? params) (let ((r (assoc (symbol->string arg) params))) (if (pair? r) (cdr r) '())) '())) (define (function-call func sitemap env args) (let ((params (cdr (assq 'params args)))) (apply func sitemap env (list params)))) (define (function-call-v sitemap env args) (let ((funname (cdr (assq 'function args))) (params (cdr (assq 'params args)))) (eval `(,(string->symbol funname) ,sitemap ,env (quote ,params)) (interaction-environment)))) (define (resource-call-v sitemap env args) (let ((funname (name->resource (cdr (assq 'resource args)))) (params (cdr (assq 'params args)))) (printf "resource-call-v: funname ~s, params ~s~%" funname params) (eval `(,(string->symbol funname) ,sitemap ,env (quote ,params)) (interaction-environment)))) (function (my-function sitemap env a b) (display (format "a = ~s, b = ~s~%" a b))) (function-call-v 1 2 '((function . "my-function") (params . (("a" . "3") ("b" . "4"))))) (function-call my-function 1 2 '((params . (("a" . "3") ("b" . "4"))))) (my-function 's 'e '(("a" . "1") ("b" . "2"))) (define test-sitemap '(sitemap (@ (*line* 3)) (resources (@ (*line* 5)) (resource (@ (name "document2html") (*line* 7)) (generate (@ (src "{source}") (type "file") (*line* 8))) (transform (@ (src "stylesheets/document2html.xsl") (*line* 9))) (serialize (@ (*line* 10))) )) (pipelines (@ (*line* 15)) (pipeline (@ (*line* 16)) (match (@ (pattern "a") (*line* 18)) (generate (@ (src "docs/{1}.xml") (type "file") (*line* 19))) (transform (@ (src "stylesheets/document2html.xsl") (*line* 20))) (serialize (@ (*line* 21))) ) (match (@ (pattern "sites/images/(.*).gif") (*line* 23)) (read (@ (src "{1}") (mime-type "image/gif") (*line* 24)))) )))) ((sxpath '(resources (resource (@ (equal? (name "document2html")))))) test-sitemap) ((sxpath '(resources resource @ (*))) test-sitemap)
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]