|
|
@@ -29,22 +29,14 @@ func parseList(s string) []string {
|
|
|
return resList
|
|
|
}
|
|
|
|
|
|
-func indexOfList(s string, index int) string {
|
|
|
- if !isList(s) {
|
|
|
- panic(fmt.Errorf("indexoflist: %s (%s)", errListExpected, s))
|
|
|
- }
|
|
|
- list := parseList(s)
|
|
|
+func indexOfList(list []string, index int) string {
|
|
|
if index < 0 || index >= len(list) {
|
|
|
panic(fmt.Errorf("indexoflist: %s", errIndexOutOfBound))
|
|
|
}
|
|
|
return list[index]
|
|
|
}
|
|
|
|
|
|
-func rangeOfList(s string, index1, index2 int) string {
|
|
|
- if !isList(s) {
|
|
|
- panic(fmt.Errorf("rangeoflist: %s (%s)", errListExpected, s))
|
|
|
- }
|
|
|
- list := parseList(s)
|
|
|
+func rangeOfList(list []string, index1, index2 int) string {
|
|
|
if index1 < 0 || index1 > len(list) || index2 < 0 || index2 > len(list) {
|
|
|
panic(fmt.Errorf("rangeoflist: %s", errIndexOutOfBound))
|
|
|
}
|
|
|
@@ -54,11 +46,7 @@ func rangeOfList(s string, index1, index2 int) string {
|
|
|
return strings.Join(wrapList(list[index1:index2]), " ")
|
|
|
}
|
|
|
|
|
|
-func spliceList(s string, index int, cnt int, val ...string) string {
|
|
|
- if !isList(s) {
|
|
|
- panic(fmt.Errorf("splicelist: %s (%s)", errListExpected, s))
|
|
|
- }
|
|
|
- list := parseList(s)
|
|
|
+func spliceList(list []string, index int, cnt int, val ...string) string {
|
|
|
if index < 0 || index > len(list) {
|
|
|
panic(fmt.Errorf("splicelist: %s", errIndexOutOfBound))
|
|
|
}
|
|
|
@@ -83,16 +71,26 @@ func opWord(val1, val2 value) value {
|
|
|
|
|
|
func opSentence(val1, val2 value) value {
|
|
|
list1, list2 := []string{val1.val}, []string{val2.val}
|
|
|
- if isList(val1.val) {
|
|
|
+ if isWord(val1.val) {
|
|
|
+ list1 = []string{val1.val[1:]}
|
|
|
+ } else if isList(val1.val) {
|
|
|
list1 = parseList(val1.val)
|
|
|
}
|
|
|
- if isList(val2.val) {
|
|
|
+ if isWord(val2.val) {
|
|
|
+ list2 = []string{val2.val[1:]}
|
|
|
+ } else if isList(val2.val) {
|
|
|
list2 = parseList(val2.val)
|
|
|
}
|
|
|
return value{val: strings.Join(wrapList(append(list1, list2...)), " ")}
|
|
|
}
|
|
|
|
|
|
func opList(val1, val2 value) value {
|
|
|
+ if isWord(val1.val) {
|
|
|
+ val1.val = val1.val[1:]
|
|
|
+ }
|
|
|
+ if isWord(val2.val) {
|
|
|
+ val2.val = val2.val[1:]
|
|
|
+ }
|
|
|
return value{val: strings.Join(wrapList([]string{val1.val, val2.val}), " ")}
|
|
|
}
|
|
|
|
|
|
@@ -100,6 +98,9 @@ func opJoin(val1, val2 value) value {
|
|
|
if !isList(val1.val) {
|
|
|
panic(fmt.Errorf("join: %s (%s)", errListExpected, val1.val))
|
|
|
}
|
|
|
+ if isWord(val2.val) {
|
|
|
+ val2.val = val2.val[1:]
|
|
|
+ }
|
|
|
return value{val: strings.Join(wrapList(append(parseList(val1.val), val2.val)), " ")}
|
|
|
}
|
|
|
|