Как визуализировать произвольное дерево?
, например: (define T1 '(and (or x1 x2)(or x3 x4 x5)))
или сгенерированное с помощью:
(define functions '(not if and or))
(define terminals '(A0 A1 A2 D0 D1))
(define functions&terminals (append terminals functions ))
(define (pick-one list)
(list-ref list (random (length list))))
(define arities '((if . 3)(and . 2)(or . 2)(not . 1)))
(define (terminal? symbol)
(find (lambda (x)(eq? x symbol)) terminals))
(define (function? symbol)
(find (lambda (x)(eq? x symbol)) functions))
(define (arity non-terminal)
(let ((arity (find (lambda (x)(eq? non-terminal (car x))) arities)))
(if arity
(cdr arity)
0)))
(define (numbers n)
(if (= n 0)
'()
(cons n (numbers (- n 1)))))
(define (gen-tree)
(let ((node (pick-one functions&terminals)))
(if (terminal? node)
node
(cons node (map (lambda (x) (gen-tree)) (numbers (arity
node)))))))
> (gen-tree)
'(or (if A1 (and A1 (not (if D1 (and A0 A0) (or A0 A0)))) (or A0 A0)) D0)
Кажется, что ракетка имеет: https://docs.racket -lang.org / pict / Tree_Layout.html
Достаточно ли для визуализации деревьев функций с именем функции и параметрами в круге?