11from itertools import tee
2- from collections import OrderedDict
32from collections .abc import Iterator , Mapping
43
5- from unification .core import unify , _unify , reify , _reify
4+ from unification .core import (
5+ _unify ,
6+ _reify ,
7+ construction_sentinel ,
8+ )
69
710from .core import car , cdr , ConsPair , cons , MaybeCons , ConsError
811
912
10- def _cons_unify (lcons , rcons , s ):
13+ def _unify_Cons (lcons , rcons , s ):
1114
1215 lcons_ = lcons
1316 rcons_ = rcons
@@ -19,27 +22,23 @@ def _cons_unify(lcons, rcons, s):
1922 rcons , rcons_ = tee (rcons )
2023
2124 try :
22- s = unify (car (lcons ), car (rcons ), s )
25+ s = yield _unify (car (lcons ), car (rcons ), s )
2326
2427 if s is not False :
25- return unify (cdr (lcons_ ), cdr (rcons_ ), s )
28+ s = yield _unify (cdr (lcons_ ), cdr (rcons_ ), s )
2629 except ConsError :
27- pass
30+ yield False
31+ else :
32+ yield s
2833
29- return False
3034
31-
32- _unify .add ((ConsPair , (ConsPair , MaybeCons ), Mapping ), _cons_unify )
33- _unify .add ((MaybeCons , ConsPair , Mapping ), _cons_unify )
34-
35-
36- @_reify .register (OrderedDict , Mapping )
37- def reify_OrderedDict (od , s ):
38- return OrderedDict ((k , reify (v , s )) for k , v in od .items ())
35+ _unify .add ((ConsPair , (ConsPair , MaybeCons ), Mapping ), _unify_Cons )
36+ _unify .add ((MaybeCons , ConsPair , Mapping ), _unify_Cons )
3937
4038
4139@_reify .register (ConsPair , Mapping )
42- def reify_cons (lcons , s ):
43- rcar = reify (car (lcons ), s )
44- rcdr = reify (cdr (lcons ), s )
45- return cons (rcar , rcdr )
40+ def _reify_Cons (lcons , s ):
41+ rcar = yield _reify (car (lcons ), s )
42+ rcdr = yield _reify (cdr (lcons ), s )
43+ yield construction_sentinel
44+ yield cons (rcar , rcdr )
0 commit comments