recursive evaluation