Module loda.runtime.evaluator
Evaluate programs to integer sequences.
Expand source code
"""Evaluate programs to integer sequences."""
from loda.lang import Program
from .interpreter import Interpreter
class Evaluator:
num_total_steps: int
"""Total number of executed interpreter steps"""
def __init__(self, program: Program, interpreter: Interpreter, eval_to_steps=False):
"""
Evaluate a program to an integer sequence.
Args:
program: Program that should be evaluated.
interpreter: Interpreter to be used.
eval_to_steps: Flag indicating whether the number of execution steps should
be returned instead of the actual evaluation result.
## Example
>>> Initialize evaluator:
>>> fibonacci = Program(...)
>>> interpreter = Interpreter()
>>> evaluator = Evaluator(fibonacci, interpreter)
>>>
>>> # Evaluate first ten terms:
>>> for _ in range(10)
>>> print(evaluator())
"""
self.__program = program
self.__interpreter = interpreter
self.__eval_to_steps = eval_to_steps
self.__memory = {}
self.__argument = 0
self.num_total_steps = 0
def __call__(self):
self.__memory.clear()
self.__memory[0] = self.__argument
num_steps = self.__interpreter.run(self.__program, self.__memory)
self.num_total_steps += num_steps
self.__argument += 1
return num_steps if self.__eval_to_steps else self.__memory[0]
Classes
class Evaluator (program: Program, interpreter: Interpreter, eval_to_steps=False)
-
Evaluate a program to an integer sequence.
Args
program
- Program that should be evaluated.
interpreter
- Interpreter to be used.
eval_to_steps
- Flag indicating whether the number of execution steps should be returned instead of the actual evaluation result.
Example
>>> Initialize evaluator: >>> fibonacci = Program(...) >>> interpreter = Interpreter() >>> evaluator = Evaluator(fibonacci, interpreter) >>> >>> # Evaluate first ten terms: >>> for _ in range(10) >>> print(evaluator())
Expand source code
class Evaluator: num_total_steps: int """Total number of executed interpreter steps""" def __init__(self, program: Program, interpreter: Interpreter, eval_to_steps=False): """ Evaluate a program to an integer sequence. Args: program: Program that should be evaluated. interpreter: Interpreter to be used. eval_to_steps: Flag indicating whether the number of execution steps should be returned instead of the actual evaluation result. ## Example >>> Initialize evaluator: >>> fibonacci = Program(...) >>> interpreter = Interpreter() >>> evaluator = Evaluator(fibonacci, interpreter) >>> >>> # Evaluate first ten terms: >>> for _ in range(10) >>> print(evaluator()) """ self.__program = program self.__interpreter = interpreter self.__eval_to_steps = eval_to_steps self.__memory = {} self.__argument = 0 self.num_total_steps = 0 def __call__(self): self.__memory.clear() self.__memory[0] = self.__argument num_steps = self.__interpreter.run(self.__program, self.__memory) self.num_total_steps += num_steps self.__argument += 1 return num_steps if self.__eval_to_steps else self.__memory[0]
Class variables
var num_total_steps : int
-
Total number of executed interpreter steps