.. _Conditional Interpret:

=====================
Conditional Interpret
=====================

It is often desirable to do actions conditionally. E.g. define
a word if it's not there. For that, the words ``[defined]`` and
``[undefined]`` can be used. Amforth lacks an ``[if]`` to really
make use of them. A real ``[if]`` is not that easy and a huge
piece of code since it has to support nested ``[if]`` too. A way
simpler solution is the following. It is restricted to the 
current SOURCE content, which is usually the current command line.

The basic idea is a conditional comment: ``?\``. It takes a flag
and works like ``\`` if the flag is true. if the flag is false, 
the remaining line is interpreted as if nothing has happened.

.. code-block:: forth

   : ?\ ( f -- ) 
     if postpone \ then 
   ; immediate


The use is straigt forward:

.. code-block:: forth

   \ define foo unless it already exists
   [undefined] foo ?\ : foo ." I'm foo " ;

   \ call a word if defined
   [defined] ver 0= ?\ ver

This recipe is based on a usenet posting of Bruce McFarling, 13.7.2014, on comp.lang.forth.