pub struct Session { /* private fields */ }Expand description
A persistent session for incremental sentence evaluation.
Maintains discourse state across multiple eval() calls, enabling
cross-sentence anaphora resolution and temporal ordering.
Implementations§
Source§impl Session
impl Session
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new session with default settings.
Examples found in repository?
3fn main() {
4 for arg in std::env::args().skip(1) {
5 if let Some(rest) = arg.strip_prefix("tokens:") {
6 let mut interner = logicaffeine_language::Interner::new();
7 let mut lexer = logicaffeine_language::Lexer::new(rest, &mut interner);
8 let toks = lexer.tokenize();
9 for t in &toks {
10 println!(" {:?}", t.kind);
11 }
12 continue;
13 }
14 if let Some(rest) = arg.strip_prefix("session:") {
15 let mut session = logicaffeine_language::Session::new();
16 for turn in rest.split('|') {
17 match session.eval(turn) {
18 Ok(fol) => println!("SOK {turn}\n => {fol}"),
19 Err(e) => println!("SERR {turn}\n => {e:?}"),
20 }
21 }
22 continue;
23 }
24 match logicaffeine_language::compile::compile(&arg) {
25 Ok(fol) => println!("OK {arg}\n => {fol}"),
26 Err(e) => println!("ERR {arg}\n => {e:?}"),
27 }
28 let forest = logicaffeine_language::compile::compile_forest(&arg);
29 println!("FOREST({}) {:?}", forest.len(), forest);
30 }
31}Sourcepub fn set_format(&mut self, format: OutputFormat)
pub fn set_format(&mut self, format: OutputFormat)
Switch the output format mid-session.
Affects only how subsequent sentences are rendered; discourse state (referents, event counters) is untouched, so a session switched to LaTeX renders exactly as one that used LaTeX from the start.
Sourcepub fn with_format(format: OutputFormat) -> Self
pub fn with_format(format: OutputFormat) -> Self
Create a new session with a specific output format.
Sourcepub fn eval(&mut self, input: &str) -> Result<String, ParseError>
pub fn eval(&mut self, input: &str) -> Result<String, ParseError>
Evaluate a single sentence, updating the session state.
Returns the transpiled logic for just this sentence. Pronouns in this sentence can resolve to entities from previous sentences.
Examples found in repository?
3fn main() {
4 for arg in std::env::args().skip(1) {
5 if let Some(rest) = arg.strip_prefix("tokens:") {
6 let mut interner = logicaffeine_language::Interner::new();
7 let mut lexer = logicaffeine_language::Lexer::new(rest, &mut interner);
8 let toks = lexer.tokenize();
9 for t in &toks {
10 println!(" {:?}", t.kind);
11 }
12 continue;
13 }
14 if let Some(rest) = arg.strip_prefix("session:") {
15 let mut session = logicaffeine_language::Session::new();
16 for turn in rest.split('|') {
17 match session.eval(turn) {
18 Ok(fol) => println!("SOK {turn}\n => {fol}"),
19 Err(e) => println!("SERR {turn}\n => {e:?}"),
20 }
21 }
22 continue;
23 }
24 match logicaffeine_language::compile::compile(&arg) {
25 Ok(fol) => println!("OK {arg}\n => {fol}"),
26 Err(e) => println!("ERR {arg}\n => {e:?}"),
27 }
28 let forest = logicaffeine_language::compile::compile_forest(&arg);
29 println!("FOREST({}) {:?}", forest.len(), forest);
30 }
31}Sourcepub fn history(&self) -> String
pub fn history(&self) -> String
Get the full accumulated logic from all sentences.
Includes temporal ordering constraints (Precedes relations).
Sourcepub fn turn_count(&self) -> usize
pub fn turn_count(&self) -> usize
Get the number of sentences processed.
Sourcepub fn world_state(&self) -> &WorldState
pub fn world_state(&self) -> &WorldState
Get direct access to the world state (for advanced use).
Sourcepub fn world_state_mut(&mut self) -> &mut WorldState
pub fn world_state_mut(&mut self) -> &mut WorldState
Get mutable access to the world state (for advanced use).