Logic Operation as Domino Gate

Programming Language

any / any

Form

Analogy

Attribution — Origin / Source

Collected by Matthias Hauswirth — Own practice, based on Matt Parker's 'domino computer'

Conceptual Advantage

See inside logic gates/operations. Construct/invent them from atomic components, and observe/analyze their full workings.

Mapping

PLNM
Boolean value domino piece (standing, or fallen)
or operation two joining lines of dominos
xor operation two lines of dominos like in left image
and operation two lines of dominos like in right image
function argument first domino piece in a line
function return value last domino piece in a line

Draws Attention To

The inner workings of a Boolean logic operation (and, or, xor).

Use When

To learn about Boolean logic operations (and, or, xor, ...).

Cost

Need domino pieces. Introduces an alternative real machine (e.g., implementation of domino AND is not exactly the same as implementation of electronic circuit AND). Mechanical inaccuracies can cause problems.

Details

The idea is described under the name “Domino Circuit”, one of three different “programming languages” that strive to eliminate abstraction, in the following paper:

Check this research paper

Matthias Hauswirth, Andrea Adamoli, and Mohammad Azadmanesh
The Program is the System
Koli Calling '17

This notional machine was used to explain logic operations to high school students and the general public in the 10-year anniversary exhibition of the Faculty of Informatics of USI. Additionally, at the end of each exhibition day, a four-bit full-adder built entirely from domino pieces was used to add two numbers picked by the students:

The original idea of a “Domino Computer”—and a fantastic set of related resources— comes from “stand-up mathematician” Matt Parker.

Comments or Feedback?

Do you have feedback on this notional machine? Did you find a mistake, or do you have a request for improvement? You can create an Issue on GitHub, where the description is hosted. This way we can see your feedback and address it.

For this, you need a GitHub account. Then follow this link to see the source file of this page. In there, click the ... left of the highlighted line, then pick "Reference in a new issue".

Create an Issue on GitHub