begin adapting the techniques of "Compiling Large Disjunctions"

This commit is contained in:
Mark Thom
2022-09-01 17:03:00 -06:00
committed by Mark
parent c5a3ec3ba8
commit 46317c3a39

View File

@@ -530,3 +530,38 @@ impl<'a> Iterator for ChunkedIterator<'a> {
self.iter.next().map(|term| self.take_chunk(term)) self.iter.next().map(|term| self.take_chunk(term))
} }
} }
/*
================================================================================
This is a disjunction compilation experiment attempting to
adapt the paper "Compiling Large Disjunctions" to Scryer Prolog.
================================================================================
*/
enum VarInfo {
Perm,
Temp,
Void
}
pub struct ChunkInfo {
chunk_num: usize,
vars: Vec<(Rc<Var>, VarInfo)>,
}
pub struct BranchInfo {
branch_num: usize, // TODO: Rational?? or own type?
delta: usize, // TODO: Rational??
chunks: Vec<ChunkInfo>,
}
pub struct ControlIterator<'a> {
current_branch_num: usize, // TODO: same as above
state_stack: Vec<TermIterState<'a>>,
branch_map: IndexMap<Rc<Var>, Vec<BranchInfo>>,
}
impl ControlIterator {
}