Function lambda_calculus::list::reverse [] [src]

pub fn reverse() -> Term

Reverses a Church list.

REVERSE := Z (λzal.NULL l (λx.a) (λx.z (PAIR (FST l) a) (SND l) I)) NIL = Z (λ λ λ NULL 1 (λ 3) (λ 4 (PAIR (FST 2) 3) (SND 2)) I) NIL

Example

use lambda_calculus::term::Term;
use lambda_calculus::list::reverse;
use lambda_calculus::arithmetic::{zero, one};
use lambda_calculus::reduction::beta;
use lambda_calculus::reduction::Order::*;

let list = Term::from(vec![one(), one(), zero()]);

assert_eq!(beta(app!(reverse(), list), NOR, 0),
           Term::from(vec![zero(), one(), one()])
);