]> hydra-www.ietfng.org Git - dyna2/commitdiff
tweaks.
authorTim Vieira <tim.f.vieira@gmail.com>
Sat, 6 Jul 2013 02:46:30 +0000 (22:46 -0400)
committerTim Vieira <tim.f.vieira@gmail.com>
Sat, 6 Jul 2013 02:46:30 +0000 (22:46 -0400)
src/Dyna/Backend/Python/repl.py
src/Dyna/Backend/Python/stdlib.py
src/Dyna/Backend/Python/term.py
test/repl/load.dynadoc

index ad65ae35c0825230aa89faa5abc556eb0abebf17..8df3a3a8c38a3f8a6de5bee5a8166f4b4107c4e2 100644 (file)
@@ -11,7 +11,7 @@ to help.
 
 import os, cmd, readline
 from utils import dynac, ip, lexer, subst, drepr, _repr, get_module
-from stdlib import topython
+from stdlib import topython, todyna
 from errors import DynaCompilerError, DynaInitializerException
 from config import dotdynadir
 from errors import show_traceback
@@ -250,7 +250,7 @@ class REPL(cmd.Cmd, object):
             return
         print
         for term, result in sorted((subst(q, result), result) for result in results):
-            print '%s = %s.' % (term, _repr(result['$val']))
+            print '%s = %s.' % (term, _repr(todyna(result['$val'])))
         print
 
     def default(self, line, show_changed=True):
index 21c4a76de8aa9d9189cc0e630c5c8ea8718b82b3..8e4729304f71384df5b6b9f01d3a5fe9717cb7b4 100644 (file)
@@ -27,7 +27,10 @@ def pycall(name, *args):
     x = eval(name)(*args)
     return todyna(x)
 
+
 def topython(x):
+    #if isinstance(x, AList) or x is Nil:
+    #    return {topython(k): topython(v) for k,v in x.aslist}
     if isinstance(x, Cons) or x is Nil:
         return [topython(y) for y in x.aslist]
     return x
@@ -35,6 +38,15 @@ def topython(x):
 def todynalist(x):    # TODO: get rid of this.
     return todyna(x)
 
+
+def getkey(m, k):
+    return m[k]
+
+def setkey(m, k, v):
+    m[k] = v
+    return m
+
+
 def todyna(x):
 
     if isinstance(x, (set, Counter)):
@@ -43,6 +55,10 @@ def todyna(x):
         return todyna(x)
 
     elif isinstance(x, dict):
+        #c = Nil
+        #for k,v in x.items():
+        #    c = AList(todyna([k,v]), c)
+        #return c
         return todyna(x.items())
 
     elif isinstance(x, (list, tuple)):
@@ -60,7 +76,7 @@ def get(x, i):
 def iter_cons(x):
     if not (isinstance(x, Cons) or x is Nil):
         raise TypeError("Attemping to iterate something which isn't a list.")
-    return x
+    return x.like_chart()
 
 def in_list(x, a):
     if not (isinstance(a, Cons) or a is Nil):
index 8b36489d5696030909aa25a6e76d150e4c6cbc62..dae2ad74a15a95716cc854866c6fe56bf7f6b06f 100644 (file)
@@ -71,13 +71,16 @@ class Cons(Term):
     def __contains__(self, x):
         return x in self.aslist
 
-    def __iter__(self):
+    def like_chart(self):
         for a in self.aslist:
             if not isinstance(a, Term):
                 yield a, (None,), a
             else:
                 yield a, (None,), a
 
+    def __iter__(self):
+        return iter(self.aslist)
+
     def __eq__(self, other):
         try:
             return self.aslist == other.aslist
@@ -111,3 +114,19 @@ class _Nil(Term):
         return False
 
 Nil = _Nil()
+
+
+#class AList(Cons):
+#
+#    def __init__(self, head, tail):
+#
+#        if not (isinstance(tail, AList) or tail is Nil):
+#            raise TypeError('Malformed alist: tail is not an alist')
+#
+#        if not (isinstance(head, Cons) and len(head.aslist) == 2):
+#            raise TypeError('Malformed alist: head is not a pair.')
+#
+#        Cons.__init__(self, head, tail)
+#
+#    def __repr__(self):
+#        return '[%s]' % (', '.join('%s -> %s' % (_repr(k), _repr(v)) for k,v in self.aslist))
index aa00c51281c2e314cc89bbf3e096952cd9a55803..dce812a3ab44b47d9eeaee3749588eb4552dcc28 100644 (file)
@@ -54,7 +54,7 @@
 
 > query tree(0)
 
-tree(0) = ['ROOT', ['S', ['NP', 'George'], ['VP', ['V', ['V', 'love'], '-s'], ['NP', 'Laura']]], '.'].
+tree(0) = ["ROOT", ["S", ["NP", "George"], ["VP", ["V", ["V", "love"], "-s"], ["NP", "Laura"]]], "."].
 
 > query sentence_length(10)