Skip to content

Commit b846eb2

Browse files
author
梶塚太智
committed
implement command reduce
1 parent f36d30b commit b846eb2

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/main.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -763,6 +763,37 @@ impl Executor {
763763
self.stack.push(Type::List(result_list));
764764
}
765765

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+
766797
// Generate a range
767798
"range" => {
768799
let step = self.pop_stack().get_number();

0 commit comments

Comments
 (0)