pub fn get_atom_types(space: &DynSpace, atom: &Atom) -> Vec<AtomType>Expand description
Returns vector of the types for the given atom in context of the given
space. Returns [%Undefined%] if atom has no type assigned.
ยงExamples
use hyperon_common::assert_eq_no_order;
use hyperon_atom::Atom;
use hyperon_macros::metta;
use hyperon_space::DynSpace;
use hyperon::space::grounding::GroundingSpace;
use hyperon::metta::types::{AtomType, get_atom_types};
let mut space = GroundingSpace::new();
space.add(metta!((: f (-> A B))));
space.add(metta!((: a A)));
space.add(metta!((: a B)));
space.add(metta!((: b B)));
let space = DynSpace::from(space);
assert_eq_no_order!(get_atom_types(&space, &metta!($x)), vec![AtomType::undefined()]);
assert_eq_no_order!(get_atom_types(&space, &metta!(1)), vec![AtomType::value(metta!(Number))]);
assert_eq_no_order!(get_atom_types(&space, &metta!(na)), vec![AtomType::undefined()]);
assert_eq_no_order!(get_atom_types(&space, &metta!(a)), vec![AtomType::value(metta!(A)), AtomType::value(metta!(B))]);
assert_eq_no_order!(get_atom_types(&space, &metta!((a b))), vec![AtomType::value(metta!((A B))), AtomType::value(metta!((B B)))]);
assert_eq_no_order!(get_atom_types(&space, &metta!((f a))), vec![AtomType::application(metta!(B))]);
assert_eq_no_order!(get_atom_types(&space, &metta!((f b))), vec![AtomType::error(metta!((-> A B)), metta!((Error (f b) (BadArgType 1 A B))))]);