gpt4 book ai didi

haskell - Haskell数据结构生成图

转载 作者:行者123 更新时间:2023-12-02 15:45:02 30 4
gpt4 key购买 nike

我正在寻找一种工具,只要给定一个包含 Haskell 中多个数据结构的文件,它就能够生成包含数据结构之间关系的图表。

我目前有一个带有解析树的文件(+- 600 行),我想更直观地看到解析树。我有什么选择?

提前致谢。

最佳答案

一种选择是使用 diagrams库,它有各种后端。 diagrams-contrib 包包含 rendering trees 的辅助功能。所以也许你可以将解析树转换为 rose tree来自 Data.Tree 并以这种方式渲染它。

以下示例使用 SVG 后端:

module Treeish where

-- This example requires the containers,
-- diagrams-core, diagrams-lib, diagrams-contrib and diagrams-svg packages
import Data.Tree
import Diagrams.Prelude
import Diagrams.TwoD.Layout.Tree (renderTree,symmLayout',_slHSep,_slVSep)
import Diagrams.Backend.SVG (SVG)
import Diagrams.Backend.SVG.CmdLine (defaultMain)

exampleTree :: Tree String
exampleTree = Node "A" [Node "B" [], Node "C" []]

renderNodeTree :: Tree String -> QDiagram SVG V2 Double Any
renderNodeTree nodeTree = renderTree
(\a -> letter a `atop` square 1.03 # fc white)
(~~)
(symmLayout' (with{ _slHSep = 3, _slVSep = 2}) nodeTree)
where
letter a = text a # font "monospace" # fontSize (local 0.47)

main :: IO ()
main = defaultMain (renderNodeTree exampleTree)

renderTree是一个函数,给定一个为树节点创建图表的函数,以及一个在两个给定点之间创建一条线的函数,返回一个从已用节点位置注释的树中创建图表的函数。

使用 symmLayout' 添加位置注释功能。

with只是 Data.Defaultdefault 的同义词。

(~~)在两点之间创建一条线。

当程序从命令行运行时(使用类似 runhaskell Treeish -o foo.svg -w 300),它将生成一个可以在浏览器中查看的 SVG 文件:

enter image description here

Herehere是最近关于图表的教程的两个部分。

关于haskell - Haskell数据结构生成图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30532695/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com