递归宏

时间:2017-10-08 21:05:53

标签: recursion scheme racket

我正在尝试创建一个可以递归操作的宏。它需要在一个(->)或两个(<->)方向的两个节点之间创建链接。我认为这是...的一个问题,似乎无法让它发挥作用。

创建结构

(define-struct node (name edges) #:transparent)

所需的输入和输出示例

> (edges node1 <-> node2 -> node3)
> node1
> (node 'node1 '(node2))
> node2
> (node 'node2 '(node1 node3))
> node3
> (node 'node3 '())

当前输入和输出

> (edges node1 -> node2 node3)
> node1
> (node 'node1 '(node2 node3))

代码

(define-syntax edge
  (syntax-rules ()
    [(edge node-name1 node-name2)
     (begin (set! node-name1 (make-node (quote node-name1) (add-unique (node-name node-name2) (node-edges node-name1)))))]))

(define-syntax edges
  (syntax-rules (-> <->)
    [(edges node-name1 -> node-name2 ...) 
     (begin (edge node-name1 node-name2 ...))]
    [(edges node-name1 <-> node-name2 ...)
     (begin (edge node-name1 node-name2) ...
            (edge node-name2 node-name1)
            ...)])) 

先前已定义节点。

1 个答案:

答案 0 :(得分:0)

这有帮助吗?

public void release()