pointer has any fieldsbut only the referenced record ^we allow the abbreviated notation in place of px it was mentioned above that variant component is essential in every recursive type to ensure finite instances the example of the family predigree is of pattern that exhibits most frequently occurring constellationnamelythe case in which one of the two cases features no further components this is expressed by the following declaration schematype record if nonterminalboolean then (tend end (tdenotes sequence of field definitions which includes one or more fields of type thereby ensuring recursivity all structures of type patterned after this schema exhibit tree (or liststructure similar to that shown in fig its peculiar property is that it contains pointers to data components with tag field onlyi without further relevant information the implementation technique using pointers suggests an easy way of saving storage space by letting the tag information be included in the pointer value itself the common solution is to extend the range of values of all pointer types by single value that is pointing to no element at all we denote this value by the special symbol niland we postulate that the value nil can be assumed by all pointer typed variables this extension of the range of pointer values explains why finite structures may be generated without the explicit presence of variants (conditionsin their (recursivedeclaration the new formulations of the explicitly recursive data types declared above are reformulated using pointers as shown below note that the field known has vanishedsince ~ known is now expressed as nil the renaming of the type ped to person reflects the difference in the viewpoint brought about by the introduction of explicit pointer values instead of first considering the given structure in its entirety and then investigating its substructure and its componentsattention is focused on the components in the first placeand their interrelationship (represented by pointersis not evident from any fixed declaration type term pointer to termdescriptortype exp pointer to expdescriptortype expdescriptor record opintegeropd opd term endtype termdescriptor record idarray of char end type person pointer to record namearray of charfathermotherperson end note the type person points to records of an anonymous type (persondescriptorthe data structure representing the pedigree shown in figs and is again shown in fig in which pointers to unknown persons are denoted by nil the resulting improvement in storage economy is obvious again referring to fig assume that fred and mary are siblingsi have the same father and mother this situation is easily expressed by replacing the two nil values in the respective fields of the two records an implementation that hides the concept of pointers or uses different technique of storage handling would force the programmer to represent the ancestor records of adam and evatwice although in accessing their data for inspection it does not matter whether the two fathers (and the two mothersare duplicated or represented by single recordthe difference is essential when selective updating is permitted treating pointers as explicit data items instead of as hidden implementation aids allows the programmer to express clearly where storage sharing is intended and where it is not