Function canrun::collections::lvec::slice

source ·
pub fn slice<T, SV, RV, CV>(slice: SV, range: RV, collection: CV) -> Slice<T>where
    T: Unify,
    LVec<T>: Unify,
    SV: Into<Value<LVec<T>>>,
    RV: Into<Value<Range<usize>>>,
    CV: Into<Value<LVec<T>>>,
Expand description

Create a Goal that attempts to unify an LVec<T> with a slice from another LVec<T> defined by a [‘Range’].

Examples:

use canrun::{all, unify, lvec, LVar, Query};

let needle = LVar::new();
let haystack = LVar::new();
let range = LVar::new();
let goal = all![
    unify(&range, 0..2),
    unify(&haystack, lvec![1, 2, 3]),
    lvec::slice(&needle, &range, &haystack),
];
let results: Vec<_> = goal.query(needle).collect();
assert_eq!(results, vec![vec![1, 2]]);