From 12c795569f72f637cf84fa54e7f1fb6f5e18d557 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Thu, 15 Dec 2022 13:41:55 -0500 Subject: Actually fix collected matches (incl disposal of old labels) Use step count + end-of-convergence hook technique --- virtual-programs/with-all.folk | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'virtual-programs') diff --git a/virtual-programs/with-all.folk b/virtual-programs/with-all.folk index 684a225f..6eb3a21e 100644 --- a/virtual-programs/with-all.folk +++ b/virtual-programs/with-all.folk @@ -1,12 +1,6 @@ Wish $this has filename "with-all.folk" set ::collectedMatches [dict create] -proc ::updateCollectedMatches {clause} { - set matches [dict get $::collectedMatches $clause] - Retract the collected matches for $clause are /something/ - Assert the collected matches for $clause are [dict keys $matches] - Step -} When /someone/ wishes to collect matches for /clause/ { set varNames [lmap word $clause {expr { [regexp {^/([^/ ]+)/$} $word -> varName] ? $varName : [continue] @@ -16,12 +10,21 @@ When /someone/ wishes to collect matches for /clause/ { foreach varName $varNames { dict set match $varName [set $varName] } dict set ::collectedMatches $clause $match true - ::updateCollectedMatches $clause On unmatch [subst { dict unset ::collectedMatches {$clause} {$match} - ::updateCollectedMatches {$clause} }] } + When $::nodename has step count /c/ { + On convergence [format { + set clause {%s} + set __matchId %d + if {[dict exists $Statements::matches $__matchId] && + [dict exists $::collectedMatches $clause]} { + set matches [dict get $::collectedMatches $clause] + Say the collected matches for $clause are [dict keys $matches] + } + } $clause $__matchId] + } On unmatch { dict unset ::collectedMatches $clause } } -- cgit v1.2.3