# [term.h] Type: Term

## contents

#include "otab.h"

## Types and Constants

DT_Term | Abstract Term Type
DT_Mode | Abstract TermType Type
DT_Val | Abstract TermValue Type
DT_Pos | Abstract TermPosition Type
DT_Itr | Abstract TermIterator Type

## Construct and Delete

    DT_Term DT_createV(DT_Mode mode, DT_Val value, DT_Pos pos)

creates value term

    DT_Term DT_createT(DT_Mode mode, DT_Term term, DT_Pos pos)

creates term with subterm

    DT_Pos DT_updPos(DT_Term term, DT_Pos pos)

updates position, returns old position

    DT_Term DT_consT(DT_Term left, DT_Term right)

concats left and right

    void DT_delT(DT_Term term, void (*del_term)(DT_Term term))

deletes term ( del_term only deletes term attributes )

## Access / Information

    c_bool DT_isTerm(DT_Term term)

term has subterm ?

    DT_Mode DT_mode(DT_Term term)

term type ( mode )

    DT_Val DT_val(DT_Term term)

term value ( ! DT_isTerm(term) )

    DT_Pos DT_pos(DT_Term term)

term value position

    DT_Term DT_next(DT_Term term)

next ( right ) term

    DT_Term DT_parts(DT_Term term)

left subterm ( DT_isTerm(term) )

## Get and Search

    int DT_cntST(DT_Term term, c_bool (*filter)(DT_Term term))

number of subterms t with filter(t) = False

    DT_Term DT_nthST(DT_Term term, int nth, c_bool (*filter)(DT_Term term))

nth subterm t with filter(t) = False [1..DT_cntST(term)]

    DT_Term DT_r_findT
            (
              DT_Term term, c_bool (*pred)(DT_Term term, StdCPtr any), StdCPtr any
            )

subterm t with (*pred)(t,any) = True ( recursive )

    DT_Term DT_l_findT
            (
              DT_Term term, c_bool (*pred)(DT_Term term, StdCPtr any), StdCPtr any
            )

subterm t with (*pred)(t,any) = True ( not recursive )

## Term Iterator

    DT_Itr DT_createIT(DT_Term term)

creates term iterator

    c_bool DT_getIT(DT_Itr iter)

next term in prae/post order

    void DT_skipIT(DT_Itr iter)

skips subterms

    short DT_stateIT(DT_Itr iter)

current status ( DT_PRAE / DT_POST )

    DT_Term DT_termIT(DT_Itr iter)

current term

    OT_Tab DT_stackIT(DT_Itr iter)

current iterator stack

    void DT_delIT(DT_Itr iter)

deletes term iterator

## Term Predicates

    c_bool DT_equalT
         (
           DT_Term left, DT_Term right,
           c_bool (*cmpEQ)(DT_Term left, DT_Term right),
           DT_Term (*filter)(DT_Term term)
         )

left = right ?

    c_bool DT_subT
         (
           DT_Term left, DT_Term right,
           c_bool (*cmpEQ)(DT_Term left, DT_Term right),
           DT_Term (*filter)(DT_Term term)
         )

left <= right ?

## Printing

    void DT_printT(DT_Term term, void (*pMember)(DT_Term term), int indent)

prints term