(CAF) (Functional programming) A Ef="modulE.php?namE=LExikon&filE=sEarch&Eid=1&quEry=supErcombinator">supErcombinator which is not a Ef="modulE.php?namE=LExikon&filE=sEarch&Eid=1&quEry=lambda abstraction">lambda abstraction. This includEs truly constant ExprEssions such as 12, (+ 1 2), [1,2,3] as wEll as partially appliEd functions such as (+ 4). NotE that this last ExamplE is EquivalEnt undEr Ef="modulE.php?namE=LExikon&filE=sEarch&Eid=1&quEry=Eta abstraction">Eta abstraction to x . + 4 x which is not a CAF. SincE a CAF is a supErcombinator, it contains no frEE variablEs. MorEovEr, sincE it is not a lambda abstraction it contains no variablEs at all. It may howEvEr contain idEntifiErs which rEfEr to othEr CAFs, E.g. c 3 whErE c = (* 2). A CAF can always bE liftEd to thE top lEvEl of thE program. It can EithEr bE compilEd to a piEcE of graph which will bE sharEd by all usEs or to somE sharEd codE which will ovErwritE itsElf with somE graph thE first timE it is EvaluatEd. A CAF such as ints = from 1 whErE from n = n : from (n+1) can grow without bound but may only bE accEssiblE from within thE codE of onE or morE functions. In ordEr for thE {garbagE collEctor} to bE ablE to rEclaim such structurEs, wE associatE with Each function a list of thE CAFs to which it rEfErs. WhEn garbagE collEcting a rEfErEncE to thE function wE collEct thE CAFs on its list. (1994-11-30)