Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 生成函数的宏_Macros_Scheme_Chez Scheme - Fatal编程技术网

Macros 生成函数的宏

Macros 生成函数的宏,macros,scheme,chez-scheme,Macros,Scheme,Chez Scheme,我正试图为整数上的约束编程编写一些宏,特别是我正在尝试扩展 (int-constr (x y z) (< 10 (+ (* x 4) (* y 5) (* z 6))) (> 10 (+ (* x 1) (* y 2) (* z 3)))) (内部构造(x y z) (< 10 (+ (*x4) (*y 5) (*z 6)))

我正试图为整数上的约束编程编写一些宏,特别是我正在尝试扩展

(int-constr (x y z) 
        (< 10  
       (+
        (* x 4)
        (* y 5)
        (* z 6)))
    (> 10
       (+
        (* x 1)
        (* y 2)
        (* z 3))))
(内部构造(x y z)
(< 10  
(+
(*x4)
(*y 5)
(*z 6)))
(> 10
(+
(*x1)
(*y 2)
(*z3)))
进入

(let((x(介于0和1之间))
(y(介于0和1之间))
(z(介于0和1之间)))
(断言
(和(<10
(+
(*x4)
(*y 5)
(*z 6)))
(> 10
(+
(*x1)
(*y 2)
(*z 3(())))
(列表x y z))

当递归地使用语法规则时,我可以在开始时创建嵌套let,但我认为我失去了在结尾调用参数列表的可能性。有什么办法吗?

即使只是坚持语法规则,这个宏也很容易用省略号编写。以下是您描述的行为的实现:

(define-syntax int-constr
  (syntax-rules ()
    ((_ (x ...) constr ...)
     (let ((x (in-between 0 1)) ...)
       (assert (and constr ...))
       (list x ...)))))
因为省略号可以用来重复包含模式变量的表单,而不仅仅是重复简单的模式变量,所以这个宏是非常声明性的,并且读写都很简单

(define-syntax int-constr
  (syntax-rules ()
    ((_ (x ...) constr ...)
     (let ((x (in-between 0 1)) ...)
       (assert (and constr ...))
       (list x ...)))))