func AddNativeTo(table *TransitionTable, s *term.SettingS, f func(Dwimmer, *term.SettingT, ...term.T) term.T, names ...string) { indices := make([]int, len(names)) for i, name := range names { for j, key := range s.Names { if name == key { indices[i] = j } } } g := func(d Dwimmer, s *term.SettingT) term.T { args := make([]term.T, len(indices)) for i, index := range indices { args[i] = s.Args[index] } s.AppendAction(term.AskC(NativeQ.C())) result := f(d, s, args...) if result != nil { s.AppendTerm(core.Answer.T(result)) s.AppendAction(term.ReturnC(term.Cr(len(s.Args) - 1))) } return result } table.Save(s.Setting, NativeTransition(g)) }
func init() { var s, t *term.SettingS s = term.InitS() s.AppendTemplate(Fold, "f", "l", "x") s = dynamics.AddSimple(s, term.ViewS(term.Sr("l"))) t = s.Copy().AppendTemplate(lists.Empty) t = dynamics.AddSimple(t, term.ReturnS(term.Sr("x"))) t = s.Copy().AppendTemplate(lists.Cons, "head", "tail") t = dynamics.AddSimple(t, term.AskS(Apply2.S(term.Sr("f"), term.Sr("x"), term.Sr("head")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "y") t = dynamics.AddSimple(t, term.AskS(Fold.S(term.Sr("f"), term.Sr("tail"), term.Sr("y")))) t = dynamics.ExpectAnswer(t, core.Answer, "A2", "A") t = dynamics.AddSimple(t, term.ReturnS(term.Sr("A"))) t = s.Copy().AppendTemplate(lists.Snoc, "init", "last") t = dynamics.AddSimple(t, term.AskS(Fold.S(term.Sr("f"), term.Sr("init"), term.Sr("x")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "y") t = dynamics.AddSimple(t, term.AskS(Apply2.S(term.Sr("f"), term.Sr("y"), term.Sr("last")))) t = dynamics.ExpectAnswer(t, core.Answer, "A2", "A") t = dynamics.AddSimple(t, term.ReturnS(term.Sr("A"))) t = s.Copy().AppendTemplate(lists.Concat, "a", "b") t = dynamics.AddSimple(t, term.AskS(Fold.S(term.Sr("f"), term.Sr("a"), term.Sr("x")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "y") t = dynamics.AddSimple(t, term.AskS(Fold.S(term.Sr("f"), term.Sr("b"), term.Sr("y")))) t = dynamics.ExpectAnswer(t, core.Answer, "A2", "A") t = dynamics.AddSimple(t, term.ReturnS(term.Sr("A"))) t = s.Copy().AppendTemplate(lists.Singleton, "y") t = dynamics.AddSimple(t, term.AskS(Apply2.S(term.Sr("f"), term.Sr("x"), term.Sr("y")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "A") t = dynamics.AddSimple(t, term.ReturnS(term.Sr("A"))) }
func (t *TransitionTable) SaveSimpleS(s *term.SettingS, a term.ActionS) *term.SettingS { aC := a.Instantiate(s.Names) t.SaveSimpleC(s.Setting, aC) return s.Copy().AppendAction(aC) }
func init() { var s, t *term.SettingS s = ApplicationSetting() s.AppendTemplate(Map, "g") s = dynamics.AddSimple(s, term.ViewS(term.Sr("x"))) t = s.Copy().AppendTemplate(lists.Empty) t = dynamics.AddSimple(t, term.ReturnS(core.Answer.S(lists.Empty.S()))) t = s.Copy().AppendTemplate(lists.Singleton, "y") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("g"), term.Sr("y")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "newy") t = dynamics.AddSimple(t, term.ReturnS(lists.Singleton.S(term.Sr("y")))) t = s.Copy().AppendTemplate(lists.Cons, "head", "tail") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("g"), term.Sr("head")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "newhead") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("f"), term.Sr("tail")))) t = dynamics.ExpectAnswer(t, core.Answer, "A2", "newtail") t = dynamics.AddSimple(t, term.ReturnS(lists.Cons.S(term.Sr("newhead"), term.Sr("newtail")))) t = s.Copy().AppendTemplate(lists.Snoc, "init", "last") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("g"), term.Sr("last")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "newlast") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("f"), term.Sr("init")))) t = dynamics.ExpectAnswer(t, core.Answer, "A2", "newinit") t = dynamics.AddSimple(t, term.ReturnS(lists.Snoc.S(term.Sr("newinit"), term.Sr("newlast")))) t = s.Copy().AppendTemplate(lists.Concat, "a", "b") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("f"), term.Sr("a")))) t = dynamics.ExpectAnswer(t, core.Answer, "A1", "newa") t = dynamics.AddSimple(t, term.AskS(Apply.S(term.Sr("f"), term.Sr("b")))) t = dynamics.ExpectAnswer(t, core.Answer, "A2", "newb") t = dynamics.AddSimple(t, term.ReturnS(lists.Concat.S(term.Sr("newa"), term.Sr("newb")))) }
func ExpectQuestion(s *term.SettingS, t term.TemplateID, names ...string) *term.SettingS { result := s.Copy() result.AppendTemplate(ParentChannel, names[0]) result.AppendTemplate(t, names[1:]...) return result }
func ExpectAnswer(s *term.SettingS, t term.TemplateID, names ...string) *term.SettingS { result := s.Copy() result.AppendTemplate(OpenChannel, names[0]) result.AppendTemplate(t, names[1:]...) return result }
func init() { //dynamics.AddNativeResponse(FallThrough, 1, dynamics.Args1(fallThrough)) dynamics.AddNativeResponse(DisplayTemplate, 1, dynamics.Args1(displayTemplate)) dynamics.AddNativeResponse(GetActionInput, 2, dynamics.Args2(getInput)) dynamics.AddNativeResponse(ParseInputAsAction, 2, dynamics.Args2(parseInput)) var s *term.SettingS s = dynamics.ExpectQuestion(term.InitS(), FallThrough, "Q", "setting") s = dynamics.AddSimple(s, term.AskS(GetTemplate.S(term.Sr("setting")))) s = dynamics.ExpectAnswer(s, core.Answer, "A", "template") s = dynamics.AddSimple(s, term.AskS(ElicitActionQ.S(term.Sr("template")))) s = dynamics.ExpectAnswer(s, core.Answer, "A2", "action") s = dynamics.AddSimple(s, term.AskS(MakeTransition.S(term.Sr("action")))) s = dynamics.ExpectAnswer(s, core.Answer, "A3", "transition") s = dynamics.AddSimple(s, term.AskS(ShouldRecord.S(term.Sr("action")))) s = dynamics.ExpectAnswer(s, core.Answer, "AA", "should") s = dynamics.AddSimple(s, term.ViewS(term.Sr("should"))) s.AppendTemplate(core.Yes) s = dynamics.AddSimple(s, term.AskS(SetTransition.S(term.Sr("transition"), term.Sr("template")))) s = dynamics.ExpectAnswer(s, core.OK, "A4") s = dynamics.AddSimple(s, term.ReturnS(TakeTransition.S(term.Sr("transition")))) s = dynamics.ExpectQuestion(term.InitS(), ShouldRecord, "Q", "action") s = dynamics.AddSimple(s, term.ViewS(term.Sr("action"))) s.AppendTemplate(represent.QuotedActionC, "act", "args", "indices") s = dynamics.AddSimple(s, term.ViewS(term.Sr("act"))) for act, template := range represent.ActionLookup { t := s.Copy().AppendTemplate(template) switch act { case term.Replace, term.Correct, term.Replay: dynamics.AddSimple(t, term.ReturnS(core.Answer.S(core.No.S()))) default: dynamics.AddSimple(t, term.ReturnS(core.Answer.S(core.Yes.S()))) } } s = dynamics.ExpectQuestion(term.InitS(), MakeTransition, "Q", "action") s = dynamics.AddSimple(s, term.ReturnS(core.Answer.S(represent.QuotedSimpleTransition.S(term.Sr("action"))))) s = dynamics.ExpectQuestion(term.InitS(), GetTemplate, "Q", "setting") t := dynamics.AddSimple(s, term.ViewS(term.Sr("setting"))) s = t.Copy().AppendTemplate(represent.QuotedTemplate, "parts") s = dynamics.AddSimple(s, term.ReturnS(core.Answer.S(term.Sr("setting")))) s = t.Copy().AppendTemplate(represent.QuotedSettingT, "template", "args") s = dynamics.AddSimple(s, term.ReturnS(core.Answer.S(term.Sr("template")))) s = dynamics.ExpectQuestion(term.InitS(), ElicitActionQ, "Q", "setting") s = dynamics.AddSimple(s, term.AskS(GetTemplate.S(term.Sr("setting")))) s = dynamics.ExpectAnswer(s, core.Answer, "A", "template") s = dynamics.AddSimple(s, term.AskS(ElicitActionQTemplate.S(term.Sr("template")))) s = dynamics.ExpectAnswer(s, core.Answer, "A2", "action") s = dynamics.AddSimple(s, term.ReturnS(core.Answer.S(term.Sr("action")))) s = dynamics.ExpectQuestion(term.InitS(), ElicitActionQTemplate, "Q", "template") s = dynamics.AddSimple(s, term.AskS(similarity.GetHints.S(term.Sr("template")))) s = dynamics.ExpectAnswer(s, core.Answer, "A", "hints") s = dynamics.AddSimple(s, term.AskS(similarity.GetTools.S(term.Sr("template")))) s = dynamics.ExpectAnswer(s, core.Answer, "A2", "tools") s = dynamics.AddSimple(s, term.AskS(ElicitActionQTemplateHints.S( term.Sr("template"), term.Sr("hints"), term.Sr("tools"), ))) s = dynamics.ExpectAnswer(s, core.Answer, "A3", "action") s = dynamics.AddSimple(s, term.ReturnS(core.Answer.S(term.Sr("action")))) s = dynamics.ExpectQuestion(term.InitS(), ElicitActionQTemplateHints, "Q", "template", "hints", "tools") s = dynamics.AddSimple(s, term.AskS(meta.Clear.S())) s = dynamics.ExpectAnswer(s, core.OK, "A") s = dynamics.AddSimple(s, term.AskS(DisplayTemplate.S(term.Sr("template")))) s = dynamics.ExpectAnswer(s, Names, "A2", "names") s = dynamics.AddSimple(s, term.AskS(similarity.DisplayTools.S(term.Sr("tools")))) s = dynamics.ExpectAnswer(s, similarity.ToolMapping, "A3", "toolmap") s = dynamics.AddSimple(s, term.AskS(similarity.DisplayHints.S(term.Sr("hints"), term.Sr("names")))) s = dynamics.ExpectAnswer(s, similarity.HintStrings, "A4", "hintstrings") s = dynamics.AddSimple(s, term.AskS(GetActionInput.S(term.Sr("hintstrings"), term.Sr("toolmap")))) s = dynamics.ExpectAnswer(s, core.Answer, "A5", "input") s = dynamics.AddSimple(s, term.AskS(ParseInputAsAction.S(term.Sr("input"), term.Sr("names")))) t = dynamics.ExpectAnswer(s.Copy(), core.Answer, "A6", "action") t = dynamics.AddSimple(t, term.ReturnS(core.Answer.S(term.Sr("action")))) t = dynamics.ExpectAnswer(s.Copy(), GoMeta, "A6") t = dynamics.AddSimple(t, term.MetaS()) dynamics.AddNativeResponse(ActionQ, 1, dynamics.Args1(findAction)) dynamics.AddNativeResponse(SetTransition, 2, dynamics.Args2(setTransition)) dynamics.AddNativeResponse(GetTransition, 1, dynamics.Args1(getTransition)) dynamics.AddNativeResponse(GetContinuations, 1, dynamics.Args1(getContinuations)) dynamics.AddNativeResponse(AllSettings, 0, dynamics.Args0(allSettings)) }
func ShowSettingS(d dynamics.Dwimmer, settingS *term.SettingS) { d.Clear() for _, line := range settingS.Lines() { d.Println(line) } }