<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Mikrointerpretaator</id>
	<title>Mikrointerpretaator - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Mikrointerpretaator"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Mikrointerpretaator&amp;action=history"/>
	<updated>2026-10-29T15:00:58Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Mikrointerpretaator&amp;diff=19038&amp;oldid=prev</id>
		<title>Tammet: Uus lehekülg: &#039;&lt;pre&gt; # a trivial treewalk interpreter in python by Tanel Tammet  def main():      example=[&quot;+&quot;,2,[&quot;*&quot;,4,5]]   print(&quot;evaluating &quot;,str(example),&quot; gives &quot;)   print(evaluate({},exa...&#039;</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Mikrointerpretaator&amp;diff=19038&amp;oldid=prev"/>
		<updated>2021-09-29T15:50:08Z</updated>

		<summary type="html">&lt;p&gt;Uus lehekülg: &amp;#039;&amp;lt;pre&amp;gt; # a trivial treewalk interpreter in python by Tanel Tammet  def main():      example=[&amp;quot;+&amp;quot;,2,[&amp;quot;*&amp;quot;,4,5]]   print(&amp;quot;evaluating &amp;quot;,str(example),&amp;quot; gives &amp;quot;)   print(evaluate({},exa...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# a trivial treewalk interpreter in python by Tanel Tammet&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  &lt;br /&gt;
  example=[&amp;quot;+&amp;quot;,2,[&amp;quot;*&amp;quot;,4,5]]&lt;br /&gt;
  print(&amp;quot;evaluating &amp;quot;,str(example),&amp;quot; gives &amp;quot;)&lt;br /&gt;
  print(evaluate({},example))&lt;br /&gt;
  &lt;br /&gt;
  example=[[&amp;quot;=&amp;quot;,&amp;quot;x&amp;quot;,1], &lt;br /&gt;
           [&amp;quot;if&amp;quot;,[&amp;quot;==&amp;quot;,&amp;quot;x&amp;quot;,[&amp;quot;-&amp;quot;,2,1]],&lt;br /&gt;
              10,&lt;br /&gt;
              20]]              &lt;br /&gt;
  print(&amp;quot;evaluating &amp;quot;,str(example),&amp;quot; gives &amp;quot;)&lt;br /&gt;
  print(evaluate({},example))&lt;br /&gt;
  &lt;br /&gt;
  example=[[&amp;quot;=&amp;quot;,&amp;quot;x&amp;quot;,1],[&amp;quot;print&amp;quot;, [&amp;quot;+&amp;quot;,&amp;quot;x&amp;quot;,2]]]&lt;br /&gt;
  print(&amp;quot;evaluating &amp;quot;,str(example),&amp;quot; gives &amp;quot;)&lt;br /&gt;
  print(evaluate({},example))&lt;br /&gt;
  &lt;br /&gt;
  example=[[&amp;quot;=&amp;quot;,&amp;quot;x&amp;quot;,0],&lt;br /&gt;
           [&amp;quot;=&amp;quot;,&amp;quot;y&amp;quot;,1],&lt;br /&gt;
           [&amp;quot;while&amp;quot;, [&amp;quot;not&amp;quot;,[&amp;quot;==&amp;quot;,&amp;quot;y&amp;quot;,10]],&lt;br /&gt;
              [&amp;quot;=&amp;quot;,&amp;quot;x&amp;quot;,[&amp;quot;+&amp;quot;,&amp;quot;x&amp;quot;,&amp;quot;y&amp;quot;]],&lt;br /&gt;
              [&amp;quot;=&amp;quot;,&amp;quot;y&amp;quot;,[&amp;quot;+&amp;quot;,&amp;quot;y&amp;quot;,1]] ],&lt;br /&gt;
           [&amp;quot;print&amp;quot;, &amp;quot;x&amp;quot;] ]&lt;br /&gt;
  print(&amp;quot;evaluating &amp;quot;,str(example),&amp;quot; gives &amp;quot;)&lt;br /&gt;
  print(evaluate({},example))&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
def evaluate(vars,term):&lt;br /&gt;
  if type(term)==int or type(term)==float:      &lt;br /&gt;
    return term&lt;br /&gt;
  elif type(term)==str: &lt;br /&gt;
    if term in vars:&lt;br /&gt;
      return vars[term]&lt;br /&gt;
    else:&lt;br /&gt;
      return 0      &lt;br /&gt;
  elif type(term)==list:&lt;br /&gt;
    op=term[0]&lt;br /&gt;
    &lt;br /&gt;
    # arithmetic&lt;br /&gt;
    if op==&amp;quot;+&amp;quot;:&lt;br /&gt;
      return evaluate(vars,term[1])+evaluate(vars,term[2])&lt;br /&gt;
    elif op==&amp;quot;*&amp;quot;:&lt;br /&gt;
      return evaluate(vars,term[1])*evaluate(vars,term[2])  &lt;br /&gt;
    elif op==&amp;quot;-&amp;quot;:&lt;br /&gt;
      return evaluate(vars,term[1])-evaluate(vars,term[2])  &lt;br /&gt;
    elif op==&amp;quot;/&amp;quot;:  &lt;br /&gt;
      return evaluate(vars,term[1])/evaluate(vars,term[2])&lt;br /&gt;
&lt;br /&gt;
    # side effects: print and assignment&lt;br /&gt;
    elif op==&amp;quot;print&amp;quot;:&lt;br /&gt;
      tmp=evaluate(vars,term[1])&lt;br /&gt;
      print(tmp)&lt;br /&gt;
      return tmp&lt;br /&gt;
    elif op==&amp;quot;=&amp;quot;:&lt;br /&gt;
      tmp=evaluate(vars,term[2])&lt;br /&gt;
      vars[term[1]]=tmp&lt;br /&gt;
      return tmp      &lt;br /&gt;
      &lt;br /&gt;
    # control  &lt;br /&gt;
    elif op==&amp;quot;==&amp;quot;:&lt;br /&gt;
      if evaluate(vars,term[1])==evaluate(vars,term[2]):&lt;br /&gt;
        return 1&lt;br /&gt;
      else:&lt;br /&gt;
        return 0&lt;br /&gt;
    elif op==&amp;quot;not&amp;quot;:&lt;br /&gt;
      if evaluate(vars,term[1])==0:&lt;br /&gt;
        return 1&lt;br /&gt;
      else:&lt;br /&gt;
        return 0    &lt;br /&gt;
    elif op==&amp;quot;if&amp;quot;:    &lt;br /&gt;
      if evaluate(vars,term[1]):&lt;br /&gt;
        return evaluate(vars,term[2])&lt;br /&gt;
      else:&lt;br /&gt;
        return evaluate(vars,term[3])&lt;br /&gt;
    elif op==&amp;quot;while&amp;quot;:&lt;br /&gt;
      tmp=0&lt;br /&gt;
      while evaluate(vars,term[1])!=0:&lt;br /&gt;
        tmp=evaluate(vars,term[2:])        &lt;br /&gt;
      return tmp  &lt;br /&gt;
    &lt;br /&gt;
    # sequence of commands&lt;br /&gt;
    elif type(op)==list:&lt;br /&gt;
      l=len(term)&lt;br /&gt;
      i=0&lt;br /&gt;
      while i&amp;lt;l:&lt;br /&gt;
        tmp=evaluate(vars,term[i])&lt;br /&gt;
        if i==l-1:&lt;br /&gt;
          return tmp&lt;br /&gt;
        i=i+1  &lt;br /&gt;
    else:&lt;br /&gt;
      print(&amp;quot;error: unknown operator &amp;quot;,str(op))&lt;br /&gt;
      return 0        &lt;br /&gt;
  else:&lt;br /&gt;
    print(&amp;quot;error: unknown argument type of &amp;quot;,str(term))&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>