This commit is contained in:
Andrew Pimenov 2026-09-10 18:12:55 +03:00 • committed by GitHub
commit f669a50234
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -98,15 +98,25 @@ function filterNoiseTokens(toks: Token[], knownVars: Set<string>): Token[] {
function tryParseGoalSeek(filtered: Token[], knownVars: Set<string>): Node | null { function tryParseGoalSeek(filtered: Token[], knownVars: Set<string>): Node | null {
// Goal seek: `? * 1.2 = 1000` → find x where lhs(x) = rhs(x) // Goal seek: `? * 1.2 = 1000` → find x where lhs(x) = rhs(x)
const hasUnknown = filtered.some((tk) => tk.t === "unknown"); let hasUnknown = false;
if (hasUnknown) { let assignIdx = -1;
const assignIdx = filtered.findIndex((tk) => tk.t === "assign"); const len = filtered.length;
if (assignIdx >= 0) { for (let i = 0; i < len; i++) {
const lhs = new Parser(filtered.slice(0, assignIdx), knownVars).parseSeq(); const t = filtered[i].t;
const rhs = new Parser(filtered.slice(assignIdx + 1), knownVars).parseSeq(); if (t === "unknown") {
if (lhs && rhs) return { k: "goalseek", lhs, rhs }; hasUnknown = true;
if (assignIdx !== -1) break;
} else if (t === "assign" && assignIdx === -1) {
assignIdx = i;
if (hasUnknown) break;
} }
} }
if (hasUnknown && assignIdx >= 0) {
const lhs = new Parser(filtered.slice(0, assignIdx), knownVars).parseSeq();
const rhs = new Parser(filtered.slice(assignIdx + 1), knownVars).parseSeq();
if (lhs && rhs) return { k: "goalseek", lhs, rhs };
}
return null; return null;
} }