#38. Interact


Following documentation is a cooperative result combined from our Discord chat. Thanks to everyone who helped!


This image was produced from the thirty-eighth radio transmission using previously contributed code.


Is a function that takes an “interaction-protocol”, some data (maybe “protocol” dependent), and some pixel. It returns some new data, and a list of pictures.

Note that during the execution it sometimes uses the send function to communicate with spacecraft.

// list function call notation
f38 protocol (flag, newState, data) = if flag == 0
                then (modem newState, multipledraw data)
                else interact protocol (modem newState) (send data)
interact protocol state vector = f38 protocol (protocol state vector)

// mathematical function call notation
f38(protocol, (flag, newState, data)) = if flag == 0
                then (modem(newState), multipledraw(data))
                else interact(protocol, modem(newState), send(data))
interact(protocol, state, vector) = f38(protocol, protocol(state, vector))

mod is defined on cons, nil and numbers only. So modem function seems to be the way to say that it’s argument consists of numbers and lists only.

So we can assume that newState is always list of list of … of numbers.

After experimenting with the galaxy interaction protocol we have found out several good ideas:

  1. We can choose any vector to pass it to the interact function. But a convenient way to input this vectors — is clicking on the image pixel from the previous interact execution result.

  1. We need to draw the images passed to multipledraw somehow. A convenient way to do it — is to overlay images one over another using different colors for different images.


ap modem x0 = ap dem ap mod x0
ap ap f38 x2 x0 = ap ap ap if0 ap car x0 ( ap modem ap car ap cdr x0 , ap multipledraw ap car ap cdr ap cdr x0 ) ap ap ap interact x2 ap modem ap car ap cdr x0 ap send ap car ap cdr ap cdr x0
ap ap ap interact x2 x4 x3 = ap ap f38 x2 ap ap x2 x4 x3