use super::dialect::parse as parse_dialect_ona;
use crate::{
cin_implements::ona::{fold_pest_compound, DialectParser, Rule},
runtimes::TranslateError,
};
use anyhow::Result;
#[cfg(not(test))]
use nar_dev_utils::OptionBoost;
use nar_dev_utils::{if_return, pipe};
use narsese::lexical::{Narsese, Term};
use navm::{
cmd::Cmd,
output::{type_names::ANTICIPATE, Operation, Output},
};
use pest::Parser;
use regex::{Captures, Regex};
pub const OPERATOR_NAME_LIST: &[&str] = &[
"left",
"right",
"up",
"down",
"say",
"pick",
"drop",
"go",
"activate",
"deactivate",
];
pub fn input_translate(cmd: Cmd) -> Result<String> {
let content = match cmd {
Cmd::NSE(..) => cmd.tail(),
Cmd::CYC(n) => n.to_string(),
Cmd::VOL(n) => format!("*volume={n}"),
Cmd::RES { .. } => "*reset".into(),
Cmd::REG { name } => match OPERATOR_NAME_LIST.contains(&name.as_str()) {
true => String::new(),
false => format!("*setopname {} ^{name}", hash_operator_id(&name)),
},
Cmd::REM { .. } => String::new(),
Cmd::EXI { .. } => "quit".into(),
Cmd::INF { source } => match source.as_str() {
"concepts" => "*concepts".into(),
"stats" => "*stats".into(),
_ => source,
},
_ => return Err(TranslateError::UnsupportedInput(cmd).into()),
};
Ok(content)
}
static mut NEXT_OPERATOR_ID: usize = 0;
const OPERATIONS_MAX: usize = 10;
fn hash_operator_id(_: &str) -> usize {
unsafe {
NEXT_OPERATOR_ID += 1;
NEXT_OPERATOR_ID %= OPERATIONS_MAX;
NEXT_OPERATOR_ID + 1
}
}
#[test]
fn test_hash_operator_id() {
dbg!([
hash_operator_id("left"),
hash_operator_id("left"),
hash_operator_id("right"),
hash_operator_id("op"),
hash_operator_id("op2"),
hash_operator_id("oq"),
]);
}
pub fn output_translate(content_raw: String) -> Result<Output> {
if_return! {
content_raw.contains("Test failed.") => Ok(Output::TERMINATED { description: content_raw })
content_raw.contains("Operator index out of bounds") => Ok(Output::ERROR { description: content_raw })
}
let (head, tail) = content_raw.split_once(':').unwrap_or(("", ""));
let output = match head.to_lowercase().as_str() {
"answer" if !content_raw.contains("Answer: None.") => Output::ANSWER {
narsese: parse_narsese_ona(head, tail)?,
content_raw,
},
"derived" => Output::OUT {
narsese: parse_narsese_ona(head, tail)?,
content_raw,
},
"input" => Output::IN {
narsese: parse_narsese_ona(head, tail)?,
content: content_raw,
},
"err" | "error" => Output::ERROR {
description: content_raw,
},
_ if content_raw.contains("executed with args") => Output::EXE {
operation: parse_operation_ona(&content_raw)?,
content_raw,
},
_ if content_raw.contains("decision expectation=") => Output::UNCLASSIFIED {
r#type: ANTICIPATE.into(),
narsese: parse_anticipate_ona(&content_raw)?,
content: content_raw,
},
_ if !content_raw.contains(char::is_whitespace) => Output::UNCLASSIFIED {
r#type: head.into(),
content: content_raw,
narsese: None,
},
_ => Output::OTHER {
content: content_raw,
},
};
Ok(output)
}
pub fn parse_operation_ona(content_raw: &str) -> Result<Operation> {
let re_operation = Regex::new(r"\^([^\s]+)\s*executed with args\s*(.*)").unwrap();
let captures = re_capture(&re_operation, content_raw.trim())?;
match captures {
Some(captures) => {
let operator_name = captures[1].into();
let params = match captures[2].trim() {
"" => vec![],
term_str => pipe! {
term_str
=> DialectParser::parse(Rule::narsese, _)
=> {?}# => .next()
=> .unwrap()
=> fold_pest_compound
=> {?}# => extract_params
},
};
Ok(Operation {
operator_name,
params,
})
}
None => Ok(Operation {
operator_name: "UNKNOWN".into(),
params: vec![],
}),
}
}
pub fn parse_anticipate_ona(content_raw: &str) -> Result<Option<Narsese>> {
let re_operation = Regex::new(r"implication:\s*(.*)\s*dt=").unwrap();
let captures = re_capture(&re_operation, content_raw.trim())?;
match captures {
Some(captures) => {
let narsese_content = captures[1].to_string();
let parse_result =
parse_narsese_ona(ANTICIPATE, narsese_content.trim()).inspect_err(|e| {
eprintln!("ONA「预期」解析失败:{e}");
});
parse_result
}
None => {
eprintln!("ONA「预期」正则捕获失败:{content_raw:?}");
Ok(None)
}
}
}
#[cfg(test)]
fn extract_params(params: Term) -> Vec<Term> {
match params {
Term::Compound { terms, .. } => terms,
_ => unreachable!("ONA的「操作参数」只能由「复合词项」承载"),
}
}
#[cfg(not(test))]
fn extract_params(params: Term) -> Vec<Term> {
match params {
Term::Compound { terms, .. } => terms,
Term::Set { terms, .. } => terms,
Term::Statement {
subject, predicate, ..
} => vec![*subject, *predicate],
Term::Atom { .. } => vec![params],
}
}
#[cfg(not(test))]
fn re_capture<'a>(re: &'a Regex, haystack: &'a str) -> Result<Option<Captures<'a>>> {
Ok(re
.captures(haystack)
.inspect_none(|| println!("使用正则表达式「{re}」无法捕获「{haystack}」")))
}
#[cfg(test)]
fn re_capture<'a>(re: &'a Regex, haystack: &'a str) -> Result<Option<Captures<'a>>> {
use anyhow::anyhow;
match re.captures(haystack) {
Some(captures) => Ok(Some(captures)),
None => Err(anyhow!("无法使用正则表达式「{re}」捕获「{haystack}」")),
}
}
#[cfg(not(test))]
pub fn parse_narsese_ona(head: &str, tail: &str) -> Result<Option<Narsese>> {
use nar_dev_utils::ResultBoost;
Ok(try_parse_narsese(tail).ok_or_run(|e| println!("【{head}】在解析Narsese时出现错误:{e}")))
}
#[cfg(test)]
pub fn parse_narsese_ona(_: &str, tail: &str) -> Result<Option<Narsese>> {
Ok(Some(try_parse_narsese(tail)?))
}
pub fn try_parse_narsese(tail: &str) -> Result<Narsese> {
pipe! {
tail
=> #{&}
=> reform_output_to_narsese
=> #{&}
=> parse_dialect_ona
}
}
fn reform_output_to_narsese(out: &str) -> String {
let re_truth = Regex::new(r"Truth:\s*frequency=([0-9.]+),\s*confidence=([0-9.]+)").unwrap();
let re_creation_t = Regex::new(r"creationTime=([0-9.]+)\s+").unwrap();
let re_occurrence_t = Regex::new(r"occurrenceTime=([0-9.]+)\s+").unwrap();
let re_dt = Regex::new(r"dt=([0-9.]+)\s+").unwrap();
let re_priority = Regex::new(r"Priority=([0-9.]+)\s+").unwrap();
pipe! {
out
=> [re_truth.replace_all](_, |caps: ®ex::Captures<'_>| {
let f = &caps[1];
let c = &caps[2];
format!("%{f};{c}%")
})
=> #{&}
=> [re_creation_t.replace_all](_, "")
=> #{&} => [re_occurrence_t.replace_all](_, "")
=> #{&} => [re_dt.replace_all](_, "")
=> #{&} => [re_priority.replace_all](_, "")
=> .trim()
=> .into()
}
}
#[cfg(test)]
mod test {
use super::*;
use nar_dev_utils::asserts;
use narsese::conversion::string::impl_lexical::format_instances::FORMAT_ASCII;
use navm::output::type_names::ANSWER;
#[test]
fn test_regex_reform() {
let inp = "<B --> C>. creationTime=2 Truth: frequency=1.000000, confidence=0.447514";
let s = pipe! {
inp
=> reform_output_to_narsese
=> .chars()
=> .into_iter()
=> .filter(|c|!c.is_whitespace())
}
.collect::<String>();
asserts! {
s => "<B-->C>.%1.000000;0.447514%",
}
}
#[test]
fn test_output_parse() {
let outputs = "
<a --> [warm]>. :|: %0.8%
Input: <a --> [warm]>. :|: occurrenceTime=1 Priority=1.000000 Truth: frequency=0.800000, confidence=0.900000
<a --> [warm]>. :|: %0.8%
Input: <a --> [warm]>. :|: occurrenceTime=2 Priority=1.000000 Truth: frequency=0.800000, confidence=0.900000
<a --> [warm]>. :|: %0.8%
Input: <a --> [warm]>. :|: occurrenceTime=3 Priority=1.000000 Truth: frequency=0.800000, confidence=0.900000
<b --> [warm]>. :|: %0.3%
Input: <b --> [warm]>. :|: occurrenceTime=4 Priority=1.000000 Truth: frequency=0.300000, confidence=0.900000
Derived: dt=1.000000 <<a --> [$1]> =/> <b --> [$1]>>. Priority=0.120425 Truth: frequency=0.300000, confidence=0.254517
Derived: dt=1.000000 <<a --> [warm]> =/> <b --> [warm]>>. Priority=0.120425 Truth: frequency=0.300000, confidence=0.254517
Derived: <a --> b>. :|: occurrenceTime=4 Priority=0.246973 Truth: frequency=0.800000, confidence=0.162760
Derived: <b --> a>. :|: occurrenceTime=4 Priority=0.194273 Truth: frequency=0.300000, confidence=0.341412
Derived: <a <-> b>. :|: occurrenceTime=4 Priority=0.189423 Truth: frequency=0.279070, confidence=0.357855
Derived: <b <-> a>. :|: occurrenceTime=4 Priority=0.189423 Truth: frequency=0.279070, confidence=0.357855
Derived: <(b | a) --> [warm]>. :|: occurrenceTime=4 Priority=0.099456 Truth: frequency=0.240000, confidence=0.648000
Derived: <(a | b) --> [warm]>. :|: occurrenceTime=4 Priority=0.099456 Truth: frequency=0.240000, confidence=0.648000
Derived: <(b & a) --> [warm]>. :|: occurrenceTime=4 Priority=0.219984 Truth: frequency=0.860000, confidence=0.648000
Derived: <(a & b) --> [warm]>. :|: occurrenceTime=4 Priority=0.219984 Truth: frequency=0.860000, confidence=0.648000
Derived: <(b ~ a) --> [warm]>. :|: occurrenceTime=4 Priority=0.064464 Truth: frequency=0.060000, confidence=0.648000
Derived: <(a ~ b) --> [warm]>. :|: occurrenceTime=4 Priority=0.161664 Truth: frequency=0.560000, confidence=0.648000
Derived: <(a * b) --> (+ warm)>. :|: occurrenceTime=4 Priority=0.247200 Truth: frequency=1.000000, confidence=0.648000
Derived: <<a --> [$1]> ==> <b --> [$1]>>. :|: occurrenceTime=4 Priority=0.108382 Truth: frequency=0.300000, confidence=0.341412
Derived: <<b --> [$1]> ==> <a --> [$1]>>. :|: occurrenceTime=4 Priority=0.137782 Truth: frequency=0.800000, confidence=0.162760
Derived: <<a --> [$1]> <=> <b --> [$1]>>. :|: occurrenceTime=4 Priority=0.105676 Truth: frequency=0.279070, confidence=0.357855
Derived: <<b --> [$1]> <=> <a --> [$1]>>. :|: occurrenceTime=4 Priority=0.105676 Truth: frequency=0.279070, confidence=0.357855
Derived: (<a --> [#1]> && <b --> [#1]>). :|: occurrenceTime=4 Priority=0.083228 Truth: frequency=0.240000, confidence=0.648000
Derived: (<b --> [#1]> && <a --> [#1]>). :|: occurrenceTime=4 Priority=0.083228 Truth: frequency=0.240000, confidence=0.648000
<(?1 ~ ?2) --> [warm]>? :|:
Input: <(?1 ~ ?2) --> [warm]>? :|:
Answer: <(a ~ b) --> [warm]>. :|: occurrenceTime=4 creationTime=4 Truth: frequency=0.560000, confidence=0.648000
^pick. :|:
Input: ^pick. :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
G. :|:
Input: G. :|: occurrenceTime=6 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=1.000000 <(<a --> [warm]> &/ ^pick) =/> G>. Priority=0.185124 Truth: frequency=1.000000, confidence=0.186952
Derived: dt=1.000000 <(<(a | b) --> [warm]> &/ ^pick) =/> G>. Priority=0.149877 Truth: frequency=1.000000, confidence=0.069427
Derived: dt=1.000000 <(<a --> b> &/ ^pick) =/> G>. Priority=0.177205 Truth: frequency=1.000000, confidence=0.059471
Derived: dt=1.000000 <(<b --> a> &/ ^pick) =/> G>. Priority=0.175070 Truth: frequency=1.000000, confidence=0.047999
Derived: dt=1.000000 <(<a <-> b> &/ ^pick) =/> G>. Priority=0.174870 Truth: frequency=1.000000, confidence=0.046913
Derived: dt=1.000000 <(<b <-> a> &/ ^pick) =/> G>. Priority=0.174870 Truth: frequency=1.000000, confidence=0.046913
Derived: dt=1.000000 <(<(b | a) --> [warm]> &/ ^pick) =/> G>. Priority=0.149877 Truth: frequency=1.000000, confidence=0.069427
Derived: dt=1.000000 <(<b --> [warm]> &/ ^pick) =/> G>. Priority=0.168996 Truth: frequency=1.000000, confidence=0.109355
Derived: dt=1.000000 <(<(a & b) --> [warm]> &/ ^pick) =/> G>. Priority=0.170733 Truth: frequency=1.000000, confidence=0.183101
Derived: dt=1.000000 <(<(b ~ a) --> [warm]> &/ ^pick) =/> G>. Priority=0.142227 Truth: frequency=1.000000, confidence=0.019374
Derived: dt=1.000000 <(<(a ~ b) --> [warm]> &/ ^pick) =/> G>. Priority=0.161554 Truth: frequency=1.000000, confidence=0.136690
Derived: dt=1.000000 <(<(a * b) --> (+ warm)> &/ ^pick) =/> G>. Priority=0.174542 Truth: frequency=1.000000, confidence=0.200929
Derived: dt=1.000000 <((<a --> [#1]> && <b --> [#1]>) &/ ^pick) =/> G>. Priority=0.134326 Truth: frequency=1.000000, confidence=0.069427
Derived: dt=1.000000 <((<b --> [#1]> && <a --> [#1]>) &/ ^pick) =/> G>. Priority=0.134326 Truth: frequency=1.000000, confidence=0.069427
Derived: dt=1.000000 <((<a --> [warm]> &/ <b --> [warm]>) &/ ^pick) =/> G>. Priority=0.134326 Truth: frequency=1.000000, confidence=0.069427
Derived: dt=1.000000 <(<(b & a) --> [warm]> &/ ^pick) =/> G>. Priority=0.170733 Truth: frequency=1.000000, confidence=0.183101
Derived: dt=3.000000 <<a --> [warm]> =/> G>. Priority=0.208187 Truth: frequency=1.000000, confidence=0.199438
Derived: dt=2.000000 <<(a | b) --> [warm]> =/> G>. Priority=0.162890 Truth: frequency=1.000000, confidence=0.075969
Derived: dt=2.000000 <<a --> b> =/> G>. Priority=0.206921 Truth: frequency=1.000000, confidence=0.065217
Derived: dt=2.000000 <<b --> a> =/> G>. Priority=0.204202 Truth: frequency=1.000000, confidence=0.052770
Derived: dt=2.000000 <<a <-> b> =/> G>. Priority=0.203948 Truth: frequency=1.000000, confidence=0.051588
Derived: dt=2.000000 <<b <-> a> =/> G>. Priority=0.203948 Truth: frequency=1.000000, confidence=0.051588
Derived: dt=2.000000 <<(b | a) --> [warm]> =/> G>. Priority=0.162890 Truth: frequency=1.000000, confidence=0.075969
Derived: dt=2.000000 <<(a * b) --> (+ warm)> =/> G>. Priority=0.191425 Truth: frequency=1.000000, confidence=0.213712
Derived: dt=2.000000 <(<a --> [#1]> && <b --> [#1]>) =/> G>. Priority=0.142122 Truth: frequency=1.000000, confidence=0.075969
Derived: dt=2.000000 <(<b --> [#1]> && <a --> [#1]>) =/> G>. Priority=0.142122 Truth: frequency=1.000000, confidence=0.075969
Derived: dt=2.000000 <(<a --> [warm]> &/ <b --> [warm]>) =/> G>. Priority=0.142122 Truth: frequency=1.000000, confidence=0.075969
Derived: dt=2.000000 <<(b & a) --> [warm]> =/> G>. Priority=0.187089 Truth: frequency=1.000000, confidence=0.195491
Derived: dt=2.000000 <<b --> [warm]> =/> G>. Priority=0.189098 Truth: frequency=1.000000, confidence=0.118623
Derived: dt=2.000000 <<(a & b) --> [warm]> =/> G>. Priority=0.187089 Truth: frequency=1.000000, confidence=0.195491
Derived: dt=2.000000 <<(b ~ a) --> [warm]> =/> G>. Priority=0.153812 Truth: frequency=1.000000, confidence=0.021435
Derived: dt=2.000000 <<(a ~ b) --> [warm]> =/> G>. Priority=0.176536 Truth: frequency=1.000000, confidence=0.147400
<(<(a ~ b) --> [warm]> &/ ^pick) =/> G>?
Input: <(<(a ~ b) --> [warm]> &/ ^pick) =/> G>?
Answer: <(<(a ~ b) --> [warm]> &/ ^pick) =/> G>. creationTime=6 Truth: frequency=1.000000, confidence=0.136690
a. :|:
Input: a. :|: occurrenceTime=1 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
^left. :|:
Input: ^left. :|: occurrenceTime=2 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
g. :|:
Input: g. :|: occurrenceTime=3 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=1.000000 <(a &/ ^left) =/> g>. Priority=0.254962 Truth: frequency=1.000000, confidence=0.241351
Derived: dt=2.000000 <a =/> g>. Priority=0.335353 Truth: frequency=1.000000, confidence=0.254517
a. :|:
Input: a. :|: occurrenceTime=4 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=1.000000 <g =/> a>. Priority=0.348301 Truth: frequency=1.000000, confidence=0.282230
Derived: dt=1.000000 <(a &/ g) =/> a>. Priority=0.246000 Truth: frequency=1.000000, confidence=0.213712
g! :|:
Input: g! :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
decision expectation=0.578198 implication: <(a &/ ^left) =/> g>. Truth: frequency=1.000000 confidence=0.241351 dt=1.000000 precondition: a. :|: Truth: frequency=1.000000 confidence=0.900000 occurrenceTime=4
^left executed with args
Input: ^left. :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
A. :|:
Input: A. :|: occurrenceTime=7 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=2.000000 <((g &/ a) &/ ^left) =/> A>. Priority=0.201969 Truth: frequency=1.000000, confidence=0.174792
Derived: dt=2.000000 <(a &/ ^left) =/> A>. Priority=0.246000 Truth: frequency=1.000000, confidence=0.213712
Derived: dt=2.000000 <((a &/ g) &/ ^left) =/> A>. Priority=0.191125 Truth: frequency=1.000000, confidence=0.127972
Derived: dt=2.000000 <(g &/ ^left) =/> A>. Priority=0.237903 Truth: frequency=1.000000, confidence=0.186952
Derived: dt=3.000000 <(g &/ a) =/> A>. Priority=0.237903 Truth: frequency=1.000000, confidence=0.186952
Derived: dt=3.000000 <a =/> A>. Priority=0.323287 Truth: frequency=1.000000, confidence=0.226692
Derived: dt=4.000000 <(a &/ g) =/> A>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=4.000000 <g =/> A>. Priority=0.312281 Truth: frequency=1.000000, confidence=0.199438
<(*, {SELF}) --> ^left>. :|:
Input: <(* {SELF}) --> ^left>. :|: occurrenceTime=8 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: (* {SELF}). :|: occurrenceTime=8 Priority=0.182344 Truth: frequency=1.000000, confidence=0.293146
G. :|:
Input: G. :|: occurrenceTime=9 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=1.000000 <(((g &/ A) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.134179 Truth: frequency=1.000000, confidence=0.068411
Derived: dt=1.000000 <((a &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.144347 Truth: frequency=1.000000, confidence=0.090215
Derived: dt=1.000000 <(((g &/ a) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.134179 Truth: frequency=1.000000, confidence=0.068411
Derived: dt=1.000000 <((g &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.141953 Truth: frequency=1.000000, confidence=0.074873
Derived: dt=1.000000 <(((a &/ A) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.136267 Truth: frequency=1.000000, confidence=0.082685
Derived: dt=1.000000 <(((a &/ g) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.131034 Truth: frequency=1.000000, confidence=0.046051
Derived: dt=1.000000 <((A &/ ^left) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.154562 Truth: frequency=1.000000, confidence=0.150345
Derived: dt=4.000000 <(a &/ ^left) =/> G>. Priority=0.230723 Truth: frequency=1.000000, confidence=0.161649
Derived: dt=4.000000 <((g &/ a) &/ ^left) =/> G>. Priority=0.191125 Truth: frequency=1.000000, confidence=0.127972
Derived: dt=4.000000 <(g &/ ^left) =/> G>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=4.000000 <((a &/ g) &/ ^left) =/> G>. Priority=0.183193 Truth: frequency=1.000000, confidence=0.090215
Derived: dt=1.000000 <((g &/ A) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.150597 Truth: frequency=1.000000, confidence=0.127972
Derived: dt=1.000000 <(a &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.166364 Truth: frequency=1.000000, confidence=0.161649
Derived: dt=1.000000 <((g &/ a) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.150597 Truth: frequency=1.000000, confidence=0.127972
Derived: dt=1.000000 <(g &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.161849 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=1.000000 <((a &/ A) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.154562 Truth: frequency=1.000000, confidence=0.150345
Derived: dt=1.000000 <((a &/ g) &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.144347 Truth: frequency=1.000000, confidence=0.090215
Derived: dt=1.000000 <(A &/ <(* {SELF}) --> ^left>) =/> G>. Priority=0.183842 Truth: frequency=1.000000, confidence=0.241351
Derived: dt=2.000000 <(g &/ A) =/> G>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=5.000000 <a =/> G>. Priority=0.302437 Truth: frequency=1.000000, confidence=0.173382
Derived: dt=5.000000 <(g &/ a) =/> G>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=6.000000 <g =/> G>. Priority=0.293787 Truth: frequency=1.000000, confidence=0.149042
Derived: dt=2.000000 <(a &/ A) =/> G>. Priority=0.230723 Truth: frequency=1.000000, confidence=0.161649
Derived: dt=1.000000 <(* {SELF}) =/> G>. Priority=0.195713 Truth: frequency=1.000000, confidence=0.148415
Derived: dt=6.000000 <(a &/ g) =/> G>. Priority=0.214505 Truth: frequency=1.000000, confidence=0.098268
Derived: dt=2.000000 <A =/> G>. Priority=0.335353 Truth: frequency=1.000000, confidence=0.254517
A. :|:
Input: A. :|: occurrenceTime=10 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=2.000000 <((a &/ ^left) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.141953 Truth: frequency=1.000000, confidence=0.074873
Derived: dt=2.000000 <(((g &/ a) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.132453 Truth: frequency=1.000000, confidence=0.056268
Derived: dt=2.000000 <(((g &/ A) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.132453 Truth: frequency=1.000000, confidence=0.056268
Derived: dt=2.000000 <(((a &/ g) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.129874 Truth: frequency=1.000000, confidence=0.037532
Derived: dt=2.000000 <((g &/ ^left) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.139967 Truth: frequency=1.000000, confidence=0.061748
Derived: dt=2.000000 <(((a &/ A) &/ ^left) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.134179 Truth: frequency=1.000000, confidence=0.068411
Derived: dt=2.000000 <(a &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.161849 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=2.000000 <((g &/ a) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.147209 Truth: frequency=1.000000, confidence=0.107901
Derived: dt=2.000000 <((g &/ A) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.147209 Truth: frequency=1.000000, confidence=0.107901
Derived: dt=2.000000 <((a &/ g) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.141953 Truth: frequency=1.000000, confidence=0.074873
Derived: dt=2.000000 <(g &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.157967 Truth: frequency=1.000000, confidence=0.117083
Derived: dt=2.000000 <((a &/ A) &/ <(* {SELF}) --> ^left>) =/> A>. Priority=0.150597 Truth: frequency=1.000000, confidence=0.127972
Derived: dt=5.000000 <(a &/ ^left) =/> A>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.138259
Revised: dt=3.113558 <(a &/ ^left) =/> A>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.301794
Derived: dt=5.000000 <((g &/ a) &/ ^left) =/> A>. Priority=0.186825 Truth: frequency=1.000000, confidence=0.107901
Revised: dt=3.090418 <((g &/ a) &/ ^left) =/> A>. Priority=0.186825 Truth: frequency=1.000000, confidence=0.249682
Derived: dt=5.000000 <((a &/ g) &/ ^left) =/> A>. Priority=0.180156 Truth: frequency=1.000000, confidence=0.074873
Revised: dt=3.066382 <((a &/ g) &/ ^left) =/> A>. Priority=0.180156 Truth: frequency=1.000000, confidence=0.185459
Derived: dt=5.000000 <(g &/ ^left) =/> A>. Priority=0.219076 Truth: frequency=1.000000, confidence=0.117083
Revised: dt=3.097308 <(g &/ ^left) =/> A>. Priority=0.219076 Truth: frequency=1.000000, confidence=0.266081
Derived: dt=6.000000 <a =/> A>. Priority=0.293787 Truth: frequency=1.000000, confidence=0.149042
Revised: dt=4.100474 <a =/> A>. Priority=0.293787 Truth: frequency=0.980787, confidence=0.323166
Derived: dt=1.000000 <G =/> A>. Priority=0.348301 Truth: frequency=1.000000, confidence=0.282230
Derived: dt=2.000000 <(* {SELF}) =/> A>. Priority=0.190743 Truth: frequency=1.000000, confidence=0.126225
Derived: dt=1.000000 <(A &/ G) =/> A>. Priority=0.246000 Truth: frequency=1.000000, confidence=0.213712
Derived: dt=1.000000 <(g &/ G) =/> A>. Priority=0.219076 Truth: frequency=1.000000, confidence=0.117083
Derived: dt=1.000000 <((* {SELF}) &/ G) =/> A>. Priority=0.170371 Truth: frequency=1.000000, confidence=0.116545
Derived: dt=7.000000 <(a &/ g) =/> A>. Priority=0.210665 Truth: frequency=1.000000, confidence=0.081831
Revised: dt=5.053462 <(a &/ g) =/> A>. Priority=0.210665 Truth: frequency=0.983303, confidence=0.202427
Derived: dt=7.000000 <g =/> A>. Priority=0.286301 Truth: frequency=1.000000, confidence=0.126793
Revised: dt=5.084493 <g =/> A>. Priority=0.286301 Truth: frequency=0.981712, confidence=0.286567
Derived: dt=1.000000 <(a &/ G) =/> A>. Priority=0.224460 Truth: frequency=1.000000, confidence=0.138259
Derived: dt=6.000000 <(g &/ a) =/> A>. Priority=0.219076 Truth: frequency=1.000000, confidence=0.117083
Revised: dt=4.077649 <(g &/ a) =/> A>. Priority=0.219076 Truth: frequency=0.982085, confidence=0.269626
G! :|:
Input: G! :|: occurrenceTime=11 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=4.000000 <a =/> (* {SELF})>. Priority=0.182921 Truth: frequency=1.000000, confidence=0.088860
Derived: dt=4.000000 <(g &/ a) =/> (* {SELF})>. Priority=0.161381 Truth: frequency=1.000000, confidence=0.067330
Derived: dt=5.000000 <(a &/ g) =/> (* {SELF})>. Priority=0.157655 Truth: frequency=1.000000, confidence=0.045286
Derived: dt=5.000000 <g =/> (* {SELF})>. Priority=0.179929 Truth: frequency=1.000000, confidence=0.073708
decision expectation=0.578198 implication: <(A &/ <(* {SELF}) --> ^left>) =/> G>. Truth: frequency=1.000000 confidence=0.241351 dt=1.000000 precondition: A. :|: Truth: frequency=1.000000 confidence=0.900000 occurrenceTime=10
^left executed with args (* {SELF})
Input: <(* {SELF}) --> ^left>. :|: occurrenceTime=11 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: (* {SELF}). :|: occurrenceTime=11 Priority=0.120799 Truth: frequency=1.000000, confidence=0.175147
A. :|:
Input: A. :|: occurrenceTime=1 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
<(*, {SELF}) --> ^left>. :|:
Input: <(* {SELF}) --> ^left>. :|: occurrenceTime=2 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
G. :|:
Input: G. :|: occurrenceTime=3 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
A. :|:
Input: A. :|: occurrenceTime=4 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
G! :|:
Input: G! :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
decision expectation=0.578198 implication: <(A &/ <(* {SELF}) --> ^left>) =/> G>. Truth: frequency=1.000000 confidence=0.241351 dt=1.000000 precondition: A. :|: Truth: frequency=1.000000 confidence=0.900000 occurrenceTime=4
^left executed with args (* {SELF})
Input: <(* {SELF}) --> ^left>. :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
A2. :|:
Input: A2. :|: occurrenceTime=8 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
<(*, {SELF}, P) --> ^left>. :|:
Input: <({SELF} * P) --> ^left>. :|: occurrenceTime=9 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
G2. :|:
Input: G2. :|: occurrenceTime=10 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
A2. :|:
Input: A2. :|: occurrenceTime=11 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
G2! :|:
Input: G2! :|: occurrenceTime=12 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
decision expectation=0.578198 implication: <(A2 &/ <({SELF} * P) --> ^left>) =/> G2>. Truth: frequency=1.000000 confidence=0.241351 dt=1.000000 precondition: A2. :|: Truth: frequency=1.000000 confidence=0.900000 occurrenceTime=11
^left executed with args ({SELF} * P)
Input: <({SELF} * P) --> ^left>. :|: occurrenceTime=12 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
A. :|:
Input: A. :|: occurrenceTime=1 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
<(*, {SELF}) --> ^op>. :|:
Input: <(* {SELF}) --> ^op>. :|: occurrenceTime=2 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
G. :|:
Input: G. :|: occurrenceTime=3 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=1.000000 <(A &/ <(* {SELF}) --> ^op>) =/> G>. Priority=0.183842 Truth: frequency=1.000000, confidence=0.241351
Derived: dt=2.000000 <A =/> G>. Priority=0.335353 Truth: frequency=1.000000, confidence=0.254517
A. :|:
Input: A. :|: occurrenceTime=4 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
Derived: dt=1.000000 <G =/> A>. Priority=0.348301 Truth: frequency=1.000000, confidence=0.282230
Derived: dt=1.000000 <(A &/ G) =/> A>. Priority=0.246000 Truth: frequency=1.000000, confidence=0.213712
G! :|:
Input: G! :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
decision expectation=0.578198 implication: <(A &/ <(* {SELF}) --> ^op>) =/> G>. Truth: frequency=1.000000 confidence=0.241351 dt=1.000000 precondition: A. :|: Truth: frequency=1.000000 confidence=0.900000 occurrenceTime=4
^op executed with args (* {SELF})
Input: <(* {SELF}) --> ^op>. :|: occurrenceTime=5 Priority=1.000000 Truth: frequency=1.000000, confidence=0.900000
A.
B?
Answer: None.
" .split('\n')
.map(str::trim)
.filter(|l| !l.is_empty());
for output in outputs {
let o = output_translate(output.into()).expect("输出解析失败");
assert!(!(o.is_type(ANSWER) && o.raw_content().contains("None.")));
if let Some(narsese) = o.get_narsese() {
println!("{}", FORMAT_ASCII.format_narsese(narsese))
} else {
println!("[{}] {}", o.type_name(), o.raw_content())
}
}
}
}