pddl/types/
f_head.rs

1//! Contains function declarations via the [`FHead`] type.
2
3use crate::types::{FunctionSymbol, Term};
4
5/// A function declaration.
6///
7/// ## Requirements
8/// Requires [Numeric Fluents](crate::Requirement::NumericFluents).
9///
10/// ## Usage
11/// Used by [`FExp`](crate::FExp), [`PEffect`](crate::PEffect), [`TimedEffect`](crate::TimedEffect)
12/// and [`FAssignDa`](crate::FAssignDa).
13#[derive(Debug, Clone, Eq, PartialEq)]
14pub enum FHead {
15    Simple(FunctionSymbol), // TODO: Unify with `WithTerms`?
16    WithTerms(FunctionSymbol, Vec<Term>),
17}
18
19impl FHead {
20    pub const fn new(symbol: FunctionSymbol) -> Self {
21        Self::Simple(symbol)
22    }
23
24    pub fn new_with_terms<I: IntoIterator<Item = Term>>(symbol: FunctionSymbol, terms: I) -> Self {
25        Self::WithTerms(symbol, terms.into_iter().collect())
26    }
27}