func settingFromID(d dynamics.Dwimmer, s *term.SettingT, quotedID term.T) term.T { id, err := represent.ToInt(d, quotedID) if err != nil { return represent.ConversionError.T(quotedID, err) } setting, ok := term.ToSetting(term.SettingID(id)) if ok { return core.Answer.T(represent.Setting(setting)) } else { return NoSetting.T() } }
func allSettings(d dynamics.Dwimmer, s *term.SettingT) term.T { queue := []*term.Setting{term.Init()} for k := 0; k < len(queue); k++ { top := queue[k] queue = append(queue, d.Continuations(top)...) } result := make([]term.T, len(queue)) for i, setting := range queue { result[i] = represent.Setting(setting) } return core.Answer.T(represent.List(result)) }
func getContinuations(d dynamics.Dwimmer, s *term.SettingT, quotedSetting term.T) term.T { setting, err := represent.ToSetting(d, quotedSetting) if err != nil { return term.Make("asked to return the continuations from a setting, " + "but while converting to a setting received []").T(err) } continuations := d.Continuations(setting) result := make([]term.T, len(continuations)) for i, c := range continuations { result[i] = represent.Setting(c) } return core.Answer.T(represent.List(result)) }
func ElicitAction(d dynamics.Dwimmer, context *term.SettingT, setting *term.Setting) dynamics.Transition { for { Q := FallThrough.T(represent.Setting(setting)) result := dynamics.SubRun(d, Q, context) switch result.Head() { case TakeTransition: transition, err := represent.ToTransition(d, result.Values()[0]) if err == nil { return transition } case core.OK: default: result, err := d.Answer(TransitionGiven.T(result, Q)) if err == nil { transition, err := represent.ToTransition(d, result) if err == nil { return transition } } } } }
//TODO only do this sometimes, or control better the length, or something... func GetHints(d dynamics.Dwimmer, context *term.SettingT, s *term.SettingS, n int) []string { suggestions, err := d.Answer(similarity.SuggestedActions.T( represent.Setting(s.Setting), represent.Int(n), ), context) if err != nil { return []string{} } suggestionList, err := represent.ToList(d, suggestions) if err != nil { return []string{} } result := []string{} for _, suggestion := range suggestionList { actionC, err := represent.ToActionC(d, suggestion) if err != nil { continue } actionS := actionC.Uninstantiate(s.Names) result = append(result, actionS.String()) } reverseHints(result) return result }
func TestRepresentations(t *testing.T) { d := dwimmer.TestDwimmer() defer d.Close() template := term.Make("term with argument [] and second half here") template2, err := represent.ToTemplate(d, represent.Template(template)) if err != nil { t.Errorf("received error %v", err) } if template != template2 { t.Errorf("%v != %v", template, template2) } setting := term.Init().Append(template) setting2, err := represent.ToSetting(d, represent.Setting(setting)) if err != nil { t.Errorf("received error %v", err) } if term.IDSetting(setting) != term.IDSetting(setting2) { t.Errorf("%v != %v", setting, setting2) } actions := []term.ActionC{term.ReturnC(term.Cr(3)), term.ClarifyC(term.Cr(2), core.OK.C()), term.DeleteC(7)} for _, action := range actions { action2, err := represent.ToActionC(d, represent.ActionC(action)) if err != nil { t.Errorf("received error %v", err) } if term.IDActionC(action) != term.IDActionC(action2) { t.Errorf("%v != %v", action, action2) } } stub := term.Make("stub") tm := template.T(stub.T()) tm2, err := represent.ToT(d, represent.T(tm)) if err != nil { t.Errorf("received error %v", err) } if tm2.String() != tm.String() { t.Errorf("%v != %v", tm2, tm) } rep, err := d.Answer(represent.Explicit.T(represent.T(tm))) if err != nil { t.Errorf("failed to make representation explicit: %v", err) } tm3, err := represent.ToT(d, rep) if err != nil { t.Errorf("received error %v", err) } if tm3.String() != tm.String() { t.Errorf("%v != %v", tm3, tm) } settingT := term.InitT().AppendTerm(tm) settingT2, err := represent.ToSettingT(d, represent.SettingT(settingT)) if err != nil { t.Errorf("received error %v") } if settingT2.Setting.ID != settingT.Setting.ID { t.Errorf("%v != %v", settingT2, settingT) } n := -127 n2, err := represent.ToInt(d, represent.Int(n)) if err != nil { t.Errorf("received error %v", err) } if n != n2 { t.Errorf("%v != %v", n, n2) } s := "hello ₳" s2, err := represent.ToStr(d, represent.Str(s)) if err != nil { t.Errorf("received error %v", err) } if s != s2 { t.Errorf("%s != %s", s, s2) } }