func getInput(d dynamics.Dwimmer, context *term.SettingT, hintstrings, toolmap term.T) term.T { quotedHints, err := represent.ToList(d, hintstrings) if err != nil { return represent.ConversionError.T(hintstrings, err) } hints := make([]string, len(quotedHints)) for i, quoted := range quotedHints { hints[i], err = represent.ToStr(d, quoted) if err != nil { return represent.ConversionError.T(quoted, err) } } tools := make(map[rune]string) for toolmap.Head() != maps.Empty { switch toolmap.Head() { case maps.Cons: vs := toolmap.Values() c, err := represent.ToRune(d, vs[0]) if err != nil { return represent.ConversionError.T(vs[0], err) } s, err := represent.ToStr(d, vs[1]) if err != nil { return represent.ConversionError.T(vs[1], err) } tools[c] = s toolmap = vs[2] default: context.AppendTerm(UnrecognizedDictionary.T()) return nil } } input := d.Readln(" < ", hints, tools) return core.Answer.T(represent.Str(input)) }
func getID(d dynamics.Dwimmer, s *term.SettingT, quoted term.T) term.T { var result int switch quoted.Head() { case represent.QuotedSetting: setting, err := represent.ToSetting(d, quoted) if err != nil { return term.Make("was asked to find the ID of a setting, " + "but while converting to a setting received []").T(err) } result = int(setting.ID) case term.Int(0).Head(): result = int(term.IDer.PackInt(int(quoted.(term.Int))).(intern.ID)) case term.Str("").Head(): result = int(term.IDer.PackString(string(quoted.(term.Str))).(intern.ID)) } return core.Answer.T(represent.Int(result)) }