コード例 #1
0
ファイル: ground.py プロジェクト: debiatan/utbp
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from tree import Tree
import itertools

"""
Types:                      Constants defined for each type:
    S-expression
    ├── list ------------->     quote ()
    └── number ----------->     0
"""
type_tree = Tree.from_tuple(('S-expression', 
                             ('list',),
                             ('number',))) 

def descendant_combinations(types):
    return itertools.product(*[type_tree.find(e).descendants() for e in types])

# List of primitive functions along with their type contract
primitives = {
    #name           : ((input_types,),                      output_type)
    'list?'         : (('S-expression',),                   'number'),
    'if'            : (('S-expression', 'S-expression', 
                        'S-expression'),                    'S-expression'),
    'car'           : (('list',),                           'S-expression'),
    'cdr'           : (('list',),                           'list'),
    'cons'          : (('S-expression', 'list'),            'list'),
    'succ'          : (('number',),                         'number'),
    'pred'          : (('number',),                         'number'),
    # Literals