Example #1
0
def render_term(asker, term):
    return asker.reply(answer=strings.concat(
        strings.concat(
            T.from_str("T("), 
            field.get(asker, representations.head(), term)),
        T.from_str(")")
    ))
Example #2
0
def render_list(asker, x):
    result = T.from_str("[")
    first = True
    for item in lists.iterator(asker, x):
        item_printed = asker.ask_firmly(render(item))
        if not first:
            item_printed = strings.concat(T.from_str(", "), item_printed)
        first = False
        result = strings.concat(result, item_printed)
    result = strings.concat(result, T.from_str("]"))
    return asker.reply(answer=result)
Example #3
0
def render_pair(asker, x):
    return asker.reply(answer=strings.concat(
        strings.concat(
            T.from_str("("),
            asker.ask_firmly(render(fields.get(pairs.first(), x))),
        ),
        strings.concat(
            T.from_str(", "),
            strings.concat(
                asker.ask_firmly(render(fields.get(pairs.first(), x))),
                T.from_str(")")
            )
        )
    ))
Example #4
0
def update_view(asker, view, input):
    relayer = asker.pass_through(should_return.head)
    #FIXME using the name view_in is a hack to keep view from being locally scoped...
    @relayer(should_print.head)
    def print_string(s):
        view_in = asker.refresh(view)
        asker.update(add_line(input), view_in)
        #FIXME more things going wrong with representation levels...
        s = convert.unquote(asker, s)
        line = asker.ask_firmly(render(s))
        asker.update(add_line(line), view_in)
        return properties.trivial()
    @relayer(should_dispatch.head)
    def dispatch(x):
        view_in = asker.refresh(view)
        asker.update(add_line(input), view_in)
        head = fields.get(asker, representations.head(), x)
        bindings = fields.get(asker, representations.bindings(), x)
        view_in = asker.refresh(view_in)
        asker.update(add_line(head), view_in)
        for p in dictionaries.item_iterator(asker, bindings):
            var, val = pairs.to_pair(asker, p)
            view_in = asker.refresh(view_in)
            asker.update(bind_variable(var, val), view_in)
        return properties.trivial()
    @relayer(should_assign.head)
    def assign(s, x):
        view_in = asker.refresh(view)
        asker.update(add_line(input), view_in)
        view_in = asker.refresh(view_in)
        asker.update(bind_variable(s, x), view_in)
        return properties.trivial()

    interpret_response = asker.ask(interpret_input(view, input), handler=relayer)
    if interpret_response.has_answer():
        bindings = dictionaries.to_dict(asker, fields.get(asker, bindings_field(), view))
        bindings_str = {strings.to_str(asker, k):v for k, v in bindings.items()}
        for char in "xyzw" + string.letters:
            if char not in bindings_str:
                break
        asker.update(bind_variable(T.from_str(char), interpret_response.answer), view)
        new_line = strings.concat(
            T.from_str("{} = ".format(char)),
            input
        )
        asker.update(add_line(new_line), view)
    return asker.reply()
Example #5
0
 def test_st_alpha_concat(self):
     data = ["Drew ", "McPherson"]
     result = concat(data)
     self.assertEqual(result, "Drew McPherson")
Example #6
0
 def test_st_escape_char(self):
     data = ['I don\'t think so']
     result = concat(data)
     self.assertEqual(result, "I don't think so")
Example #7
0
 def test_st_quote(self):
     data = ['He said, "I see it"']
     result = concat(data)
     self.assertEqual(result, 'He said, "I see it"')
Example #8
0
 def test_st_apostrophe(self):
     data = ["I don't think so"]
     result = concat(data)
     self.assertEqual(result, "I don't think so")
Example #9
0
 def test_st_specl_concat(self):
     data = ["Drew ", "????? ", "McPherson ", "!!!!!"]
     result = concat(data)
     self.assertEqual(result, "Drew ????? McPherson !!!!!")
Example #10
0
 def test_st_num_concat(self):
     data = ["9 ", "16 ", "2019"]
     result = concat(data)
     self.assertEqual(result, "9 16 2019")
Example #11
0
def render_dict(asker, x):
    return asker.reply(answer=strings.concat(
        T.from_str("D"),
        lists.from_dict(x)
    ))