Function lambda_calculus::list::length [] [src]

pub fn length() -> Term

Applied to a Church-encoded list it returns its Church-encoded length.

LENGTH := Y (λgcx.NULL x c (g (SUCC c) (SECOND x))) ZERO = Y (λλλ NULL 1 2 (3 (SUCC 2) (SECOND 1))) ZERO

Example

use lambda_calculus::term::Term;
use lambda_calculus::list::{length, nil};
use lambda_calculus::reduction::beta_full;

let list_4 = Term::from(vec![1.into(), 1.into(), 0.into(), 1.into()]);

assert_eq!(beta_full(length().app(nil())),  0.into());
assert_eq!(beta_full(length().app(list_4)), 4.into());