0
我試圖創建一個可以遞歸操作的宏。它需要在一個(->
)或兩個(<->
)方向上的兩個節點之間創建鏈接。我相信這是...
的問題,似乎無法使其正常工作。遞歸宏
創建的結構
(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)
...)]))
節點被前面所定義。
我覺得'邊緣'不應該是一個宏,在這種情況下,但主要是我的spidey感言 – naomik