File tree Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Expand file tree Collapse file tree 1 file changed +31
-0
lines changed Original file line number Diff line number Diff line change @@ -763,6 +763,37 @@ impl Executor {
763
763
self . stack . push ( Type :: List ( result_list) ) ;
764
764
}
765
765
766
+ "reduce" => {
767
+ let code = self . pop_stack ( ) . get_string ( ) ;
768
+ let now = self . pop_stack ( ) . get_string ( ) ;
769
+ let acc = self . pop_stack ( ) . get_string ( ) ;
770
+ let list = self . pop_stack ( ) . get_list ( ) ;
771
+
772
+ for x in list. iter ( ) {
773
+ self . memory
774
+ . entry ( now. clone ( ) )
775
+ . and_modify ( |value| * value = x. clone ( ) )
776
+ . or_insert ( x. clone ( ) ) ;
777
+
778
+ self . evaluate_program ( code. clone ( ) ) ;
779
+ let result = self . pop_stack ( ) ;
780
+
781
+ self . memory
782
+ . entry ( acc. clone ( ) )
783
+ . and_modify ( |value| * value = result. clone ( ) )
784
+ . or_insert ( result) ;
785
+ }
786
+
787
+ let result = self . memory . get ( & acc) ;
788
+ self . stack
789
+ . push ( result. unwrap_or ( & Type :: String ( "" . to_string ( ) ) ) . clone ( ) ) ;
790
+
791
+ self . memory
792
+ . entry ( acc. clone ( ) )
793
+ . and_modify ( |value| * value = Type :: String ( "" . to_string ( ) ) )
794
+ . or_insert ( Type :: String ( "" . to_string ( ) ) ) ;
795
+ }
796
+
766
797
// Generate a range
767
798
"range" => {
768
799
let step = self . pop_stack ( ) . get_number ( ) ;
You can’t perform that action at this time.
0 commit comments