lambda {} $head {$cons {set p} {set q}} |
This would be a typical way of invoking the evaluation of a body with arguments which contained lambda abstractions. |

-> $head {$cons {set p} {set q}} |
Lambda reduction because the argument list is empty. Reduce first list element, though in this case the operation is redundant |

-> {lambda c {$c {lambda {x y} {$x}}}} {$cons {set p} {set q}} |
Variable substitution of first list element |

-> lambda c {$c {lambda {x y} {$x}}} {$cons {set p} {set q}} |
List reduction of the first element after variable substitution. |

-> lambda {} {{$cons {set p} {set q}} {lambda {x y} {$x}}} |
By currying. |

-> {$cons {set p} {set q}} {lambda {x y} {$x}} |
Lambda reduction |

-> $cons {set p} {set q} {lambda {x y} {$x}} |
First element list reduction after lambda reduction |

-> {lambda {a b f} {$f $a $b}} {set p} {set q} {lambda {x y} {$x}} |
Variable substitution of first element |

-> lambda {a b f} {$f $a $b} {set p} {set q} {lambda {x y} {$x}} |
First element list reduction after variable substitution |

-> lambda {} {{lambda {x y} {$x}} {set p} {set q}} |
by currying |

-> {lambda {x y} {$x}} {set p} {set q} |
Lambda reduction |

-> lambda {x y} {$x} {set p} {set q} |
First element list reduction after lambda reduction |

-> lambda {} {{set p}} |
By currying |

->{set p} |
Lambda reduction |

->set p |
First element list reduction after lambda reduction. This is not a lambda command so return eval {set p} |