Threads & Niladic Functions

In common with other operators, the spawn operator & may accept monadic or dyadic functions as operands, but not niladic functions. This means that, using spawn, you cannot start a thread that consists only of a niladic function

If you wish to invoke a niladic function asynchronously, you have the following choices:

  • Turn your niladic function into a monadic function by giving it a dummy argument which it ignores.
  • Call your niladic function with a dfn to which you give an argument that is implicitly ignored. For example, if the function NIL is niladic, you can call it asynchronously using the expression: {NIL}& 0
  • Call your function via a dummy monadic function, for example

         NIL_M DUMMY
    [1]   NIL
        
        NIL_M& '' 
    
  • Use execute, for example

    & 'NIL'
    

Note that niladic functions can be invoked asynchronously as callback functions. For example, the statement:

      ⎕WS'Event' 'Select' 'NIL&'

will execute correctly as a thread, even though NIL is niladic. This is because callback functions are invoked directly by ⎕DQ rather than as an operand to the spawn operator.