0
再帰的に動作するマクロを作成しようとしています。 1つのノード(->
)または2つの方向(<->
)の2つのノード間にリンクを作成する必要があります。私はそれが...
の問題だと信じて、それを動作させるように見えることはできません。再帰マクロ
作成した構造
(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)
...)]))
ノードが以前に定義されています。
「エッジ」はマクロであってはならないと感じます。しかし、それはたいてい私のスパイシーな感覚です – naomik