Module multifield

Module multifield 

Source
Expand description

Multi-field (Multislot) Variables - CLIPS-inspired Feature

This module implements CLIPS-style multi-field variables for pattern matching on arrays and collections. Multi-field variables allow:

  • Collecting all values: Order.items $?all_items
  • Checking containment: Product.tags contains "electronics"
  • Getting array length: Order.items count > 0
  • Accessing elements: Order.items first, Order.items last

§CLIPS Reference

(deftemplate order
  (slot order-id)
  (multislot items))

(defrule process-order
  (order (order-id ?id) (items $?all-items))
  =>
  (foreach ?item $?all-items
    (process ?item)))

§Rust API

use rust_rule_engine::rete::{MultifieldOp, PatternConstraint};

// Pattern: Order.items $?all_items
let constraint = PatternConstraint::MultiField {
    field: "items".to_string(),
    variable: Some("$?all_items".to_string()),
    operator: MultifieldOp::Collect,
    value: None,
};

// Pattern: Product.tags contains "electronics"
let constraint = PatternConstraint::MultiField {
    field: "tags".to_string(),
    variable: None,
    operator: MultifieldOp::Contains,
    value: Some(FactValue::String("electronics".to_string())),
};

Enums§

MultifieldOp
Multi-field operations for pattern matching

Functions§

evaluate_multifield_pattern
Helper function to evaluate multi-field patterns in rules
is_multifield_variable
Check if a string is a multi-field variable
parse_multifield_variable
Parse multi-field variable syntax