Question moved here from the biology stack exchange.

It looks like the genome is a kind of LISP language.

Operon structure of genome: - https://github.com/philschatz/microbiology-book/blob/master/resources/OSC_Microbio_11_07_Operon.jpg

LISP function structure: - http://support.ircam.fr/docs/om/om6-manual/res/listprefix.png

Nested genes: - https://player.slideplayer.com/31/9782148/data/images/img11.jpg

Nested LISP cons cells: - https://www.tutorialspoint.com/lisp/images/treestructure.jpg

The basic similarity I am seeing is of general structure: (func var0 var1 ... varn) and nested cons cells.

The correspondence with genome structure is the operon portion, which has:

  • operator = function

  • structural genes = variables

  • structural genes can be nested like cons cells

Is this a global structure for the genome, then a specific prediction is we can do something simple like counting open and close markers in the nested genes and they will be equal.

So, why would such a correspondence matter, if true? The basic idea is that if the LISP structure is consistent, then we could maybe look for other programming constructs built on the structure, such as recursion/looping, maybe templating or even object oriented programming. Or just identify simple properties like balanced opening closing markers. The mere fact it has a LISP structure would be fascinating if true. And since LISP is essentially an abstract syntax tree (AST), which all programming languages have, perhaps this structure I see in the genome is actually an AST, which implies an even more fundamental correspondence between the genome and programming languages.

More generally, we have a wealth of knowledge reverse engineering human programming languages. If the genome is also a programming language similar in some respects to human programming languages, such as being a LISP variant, then we could apply this same reverse engineering knowledge base to better understand the genome.

So, first of all, is my high level observation correct? Does the genome, at least for bacteria, have a global LISP like structure? If yes, then if the genome is a kind of programming language, i.e. LISP, can we analyze it like software to understand its functionality? Has anyone done this before? Simple searching on Google Scholar turns up lots of software for analyzing genomes, but nothing about analyzing the genome as software. It would be interesting to know whether anyone has seriously examined the question before, and either made some useful discoveries, or found out there is only a very loose analogy with programming languages, and thus knowledge regarding programming languages is not of use regarding the genome.

Hopefully this question is clear enough now, if not please ask me for further clarification. I would like to get some sort of decent answer.

UPDATE: Someone who has put thought into "DNA is code" idea. At a more general level than whether specific genome structures match specific programming structures.

UPDATE #2: The late Scott Federhen of NCBI wrote an article comparing genomic replication with the lambda operator.

UPDATE #3: It might be the case that LISP was inspired by the genome.

  • 4
    $\begingroup$ I'm afraid you're going to get much the same reception here as you did in Biology. Please edit and point to specific features of the genome that, to you, are similar to specific features of LISP. What would the "func" be in the genome? What are the vars? The genome is usually thought of in terms of natural languages with words (codons) making sentences (genes) and punctuation (start and stop codons). And I fear you are vastly underestimating the complexity of the cellular machinery that reads the genome. Also, your first link is broken. $\endgroup$ – terdon Jul 1 '19 at 22:16
  • 1
    $\begingroup$ AKA Richard Dawkins without the proofs. You need to draw down a specific testable hypothesis, the days when rhetoric ruled evolutionary theory ended with sequencing. LISP has a lot of fans (Perl people like it), biological systems are far less tractable and much more diverse. $\endgroup$ – M__ Jul 2 '19 at 8:25
  • 3
    $\begingroup$ xkcd.com/793 $\endgroup$ – Chris_Rands Jul 2 '19 at 9:18
  • 5
    $\begingroup$ Please edit your question and explain all this. Ideally, explain why you think programming languages are a good paradigm and better than natural languages. I still haven't seen any good evidence presented here and fear it might be a case of "when all you have is a hammer, everything looks like a nail". Granted, perhaps I'm the one with the hammer and not you, but that's why it would be really helpful if you could express your idea in terms of specific features of programming languages and how those would help you understand the genome better than we do already. $\endgroup$ – terdon Jul 2 '19 at 17:57
  • 1
    $\begingroup$ I'm voting to close this question as off-topic because it has nothing to do with bioinformatics $\endgroup$ – M__ Jul 3 '19 at 20:24

I see what the metaphor has been inspired by, where I think it got turned around, and might have a better one.

I'd like to back up a bit and establish some common ground. It isn't wrong to expect that some aspects of genetic code and software code are similar, and while biology is usually very specific, some aspects can be seen productively from the light of computer science ideas. For example, mass-action molecular dynamics, which are often a good model for protein interactions, are Turing-complete. Here's a fun example where people have written a programming language out of molecular dynamics: https://arxiv.org/abs/1809.07430

It's also true that proteins have particular substructures leading to certain functions, such as using alpha-helices to react less with the outside world. Learning about larger substructures, called protein domains, help identify the functions of families of proteins.

The problem is that the parts of the genome which appear nested like LISP cells actually aren't included in the protein. The regulatory regions, promoters, inhibitors, introns, and so forth never become part of the key "computational" machinery. This nesting isn't actively part of the computational activity proteins do perform. The main quality of LISP is that the structure and function are perfectly self-similar throughout an expression, but the structure of the regulatory regions are neither replicated down into the protein nor are necessarily recapitulated on a larger scale.

Unfortunately, we don't expect the computational structure of proteins to be the same from one protein to another. This is because "binds only with X" and "binds only with Y" must be implemented differently to successfully be distinct operations, and it is these binding constraints by which molecular dynamics implement "computational" operations, such as "not X" and "not Y", and so those are distinct as well.

I think a better way to think about the regular structures of the regulatory apparatus is more like a network protocol. Along an otherwise undifferentiated binary channel, one has to identify when and where the data is delivered to an application. Similarly, along a strand of bases, the machinery of translation has to have an indication of where the "application" of the protein starts and ends, and when that protein should be delivered to the cell. We might compare some of the images of genetic structure that provided in the original question with layouts of network headers: http://slideplayer.com/slide/4798836/15/images/16/TCP/IP+Packet+Structures.jpg We might compare bacterial versus multi-cellular regulation as having different delivery mechanisms and data structures for delivering the application information, for different functional consequences, in the same way TCP and UDP have different structures for different trade-offs.

This is all complicated somewhat by the fact that proteins do then interact with the regulation of genes, leading to interesting "computational" dynamics such as feed-forward regulation. However, I'm not aware of any particular structure of the regulatory apparatus that necessarily correlates with these larger functional patterns. The opposite is frequently biologically useful: the same structure of a protein helping to activate one gene might simultaneously inhibit another.

One book I've found very accessible and useful in understanding where computation is useful biologically is Dennis Bray's "Wetware: a computer in every living cell". It gave me a clearer picture of how computation occurs in cells. That should open up some introductions to systems biology which explains the biological-role of larger molecular "computational" patterns.

  • 1
    $\begingroup$ Great answer! First answer of substance on either site! I'll have to think it over, and if I find your reasoning persuasive, I'll accept this answer. $\endgroup$ – yters Jul 5 '19 at 18:54
  • 1
    $\begingroup$ Right, so it is true that a kind of compilation does happen, where sequences of bases undergo a translation into the amino acids that make the protein. The observation that I'm making is that the part of the gene in which you observed the LISP structure, is not included in that translation process. Instead, those structures have been stripped away at that point. This is similar to how when data is provided by a network protocol to the application, those headers are not delivered to the application. $\endgroup$ – John with waffle Jul 6 '19 at 21:14
  • 1
    $\begingroup$ The question is then whether or not we expect to see regular structures corresponding to computational structures in the part of the gene that is then translated, such as how we would see machine instructions for branching, adding, and these sorts of things. Unfortunately, the answer is generally not, as the computations implied have to be specific for each different input. If the answer were yes, the challenges of bioinformatics would be much easier! $\endgroup$ – John with waffle Jul 6 '19 at 21:20
  • 1
    $\begingroup$ It occurs to me that it might be helpful to know that promoters, inhibitors, introns, and so forth are occasionally called "non-coding regions" given that they aren't included in translation. The following diagram might be helpful: en.wikipedia.org/wiki/… $\endgroup$ – John with waffle Jul 7 '19 at 0:19
  • 1
    $\begingroup$ Thanks again, this is a truly excellent series of answers, and you've clarified the issue greatly in my mind and given me a reference to further my understanding. Great work! $\endgroup$ – yters Jul 8 '19 at 3:16

So, first of all, is my high level observation correct? Does the genome, at least for bacteria, have a global LISP like structure?

No. I'm afraid this is what it boils down to. I don't see any real similarity to LISP or other programming languages at all. Perhaps it would be clearer if you could explain in detail why you think they're similar, but as it stands, no, there is no such structure apart from a very simplistic similarity which is sort of the same as saying that the genome is like a car because it carries genes and could therefore be studied by a car mechanic.

  • $\begingroup$ You don't find the correspondence list in my question clear enough? I'm asking about the structure, which seems to be the same as a LISP program, or perhaps more generally an abstract syntax tree. And yes, the structure itself is pretty simple, but still there seems to be an exact correspondence, more so than referring to a car. I am somewhat bemused this question is so hard for people to understand and answer. $\endgroup$ – yters Jul 3 '19 at 16:25
  • 1
    $\begingroup$ @yters no, I don't find it clear at all. As far as I can tell, you seem to be comparing functions and their arguments to operons and their genes, but I don't see any similarity at all there. That's why I posted so many comments asking you to get more specific. I have no idea why you feel that operons are more like functions than they are like cars or bowls or anything else that can contain items. You might want to look into gene regulatory networks though, those are closer to what you're getting at. $\endgroup$ – terdon Jul 3 '19 at 16:44
  • $\begingroup$ You could say there is a disanalogy in that the promoter/operator is not really a function, but controls whether the genes in the operon are "executed". But there is still generally a notion of "execute this thing" and a nested tree structure. $\endgroup$ – yters Jul 3 '19 at 17:17
  • 2
    $\begingroup$ @yters not really. That's not how the promoter works. Promoters tend to control how much it is executed, not whether. And they're just the tip of the iceberg in terms of regulation. $\endgroup$ – terdon Jul 3 '19 at 19:01
  • 1
    $\begingroup$ @yters it is only one of many things that affect gene expression, some of which are before the gene, some in it, some after it, some can even be quite distant from it and others aren't even part of the genome at all. As I said before, you are vastly underestimating the complexity of the genome. $\endgroup$ – terdon Jul 3 '19 at 19:23

You mention this as the base similarity you find:

operator = function
structural genes = variables
structural genes can be nested like cons cells

As other has pointed, this just considers the genome as a sequence of where only the linear order is important. It doesn't take into account other things that happen on the genome that are know to affect the cells like the chromatin structure, the duplication of certain regions, the transversion, the effect of moving elements, methylation, or simply that a single gene can have multiple functions (pleiotropism, moonlighting) while a programming function does not.

Even if we considered it as code, certainly by using tools like HMM we could also learn more about the structure of the genes we have. While certainly, we need more tools than just the sequence to discover what does each gene do.

There are a lot more differences than similarities on this comparison, it can be helpful for certain aspects but it fails for other aspects of cells (without even going into the virus discussion or the mitochondrial).


The only possible parallel was the "processor 'core' wars" in Avida and Tierra. Tierra was initiated by Tom Ray, around 1990. Here they had a 'population' of compiled binaries were randomly mutated (yep the binary code was mutated) and reproduction was dependent on how much of the processor could be consumed. The simulation worked and an in silico ecosystem evolved, but was heavily dependent on the preconditions of the simulation and proved no more reliabe at understanding evolution than differential equestions. So it was a nice idea, and very cool it worked, but it came to zero.

That aside the best example was the concept of the "selfish gene", but has very little to do with programming languages IMO and everything to do with understanding kinselection.

  • $\begingroup$ Not sure what question you are answering here. I am not asking about evolution simulations. $\endgroup$ – yters Jul 3 '19 at 16:22
  • $\begingroup$ To say I want "genome understanding" without evolution, is like saying I want a watch without hands. Can't have one without the other. $\endgroup$ – M__ Jul 3 '19 at 20:19
  • $\begingroup$ I would say it is more like I can understand the C source code of a UNIX utility without having to know the history of UNIX or C's development. $\endgroup$ – yters Jul 3 '19 at 20:43

Believe it or not, there are people who know more than you do about programming, and who also know a hell of a lot more than you do about the genome. This is not an avenue those people think is worth pursuing.

DNA is a chemical, and interacts with other chemicals based on its shape. There is no equivalent to that in a human designed programming language.

  • 4
    $\begingroup$ This seems unnecessarily combative. The OP never claimed to be an expert! $\endgroup$ – terdon Jul 3 '19 at 16:20
  • $\begingroup$ Which is why OPs first step should have been to read what experts in both subjects have been doing in the field he's interested in, instead of trying to impress a bunch of volunteers with programming jargon. $\endgroup$ – swbarnes2 Jul 3 '19 at 16:34
  • 4
    $\begingroup$ Wow. Please take a step back and stop assuming malice. The OP did do some research and did try and see if any work had been done. Nobody's out to impress anybody here, so please stop being so aggressive! $\endgroup$ – terdon Jul 3 '19 at 16:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.