package edu.stanford.nlp.ling.tokensregex.types;

import edu.stanford.nlp.ling.tokensregex.Env;

import java.util.List;

/**
 * A function that takes as input an environment (Env) and a list of values
 * ({@code List<Value>}) and returns a Value.
 *
 * @author Angel Chang
 */
public interface ValueFunction {

  /**
   * Checks if the arguments are valid.
   *
   * @param in
   * @return true if the arguments are valid (false otherwise)
   */
  boolean checkArgs(List<Value> in);

  /**
   * Applies the function to the list values using the environment as context
   * and returns the evaluated value.
   *
   * @param env the environment to use
   * @param in the input arguments
   * @return Value indicating the value of the function
   */
  Value apply(Env env, List<Value> in);

  /**
   * Returns a string describing what this function does.
   *
   * @return String describing the function
   */
  String getDescription();

}
