Everything in Julia has its type, we can use typeof()
to obtain its type. There is a complex hierarchical type Tree structure in Julia, meaning that every non-root type has its 'parent' type from which it is 'derived'. We can use supertype()
to get parent type and subtypes()
to get all its children types:
I wrote several lines of code for studying this tree-structure of Types in Julia. The root variable is defined as input which should be a Type in Julia and this file shall output all its derived types. The output of this code is a file where each line contains a type-type pair and their relation (simple entity-relation case of Knowledge Graph).
using InteractiveUtils # thus we can call subtypes() without interactive mode
root = Real # or other types that we want to get all its derivative types
## a parent - (relation) -> son data struct
struct TypeLink
node_parent::String
relation::String
node_son::String
end
function getLink(parentName, childName)
return TypeLink(parentName, "is_parent_of", childName)
end
l = TypeLink[]
println(length(subtypes(root)))
function getAllChildren(node)
if length(subtypes(node)) > 0
for i in subtypes(node)
s = getLink(string(node), string(i))
push!(l, s)
# println( string(i))
if i != Any
getAllChildren(i)
end
end
end
return
end
# GO!
getAllChildren(root)
println(length(l))
# save to file
open(string(root)*"Type.txt", "w") do f
for i in l
n1 = i.node_parent
n2 = i.node_son
n3 = i.relation
write(f, "$n1, $n2, $n3 \n")
end
end
The output file content is shown below:
Now I load the output data to Neo4j, and check the output:
I tried also obtaining all derived type of Any type. This yields more than 10k links:
Impossible to plot the entire graph, I show a partial graph who contains 100 relations:
Top comments (0)