Add array concat operator

This commit is contained in:
2026-06-19 01:01:04 +09:00
parent 6da0ec4c77
commit 01ad6dca52
17 changed files with 6365 additions and 5138 deletions
+17 -5
View File
@@ -7,9 +7,21 @@ array expression は、順序付きの値の列を表す。
["a", "b", "c"]
```
## 未確定事項
## Array concat
- 配列要素の制約表現
- 異種配列を許可するか。
- `//` による patch を右辺置換だけにするか。
- append / prepend / remove などの操作を提供するか。
`++` は concrete array 同士を連結する
```dcdl
base = ["read", "write"];
extra = ["admin"];
roles = base ++ extra;
```
`roles` は以下と同じ値になる。
```dcdl
["read", "write", "admin"]
```
`++` は配列要素を変換しない。
左辺の要素の後に右辺の要素が並ぶ。
+17 -6
View File
@@ -14,6 +14,7 @@
| `/` | `lhs / rhs` | arithmetic | concrete `Int` / `Float` | `Float` quotient |
| `+` | `lhs + rhs` | arithmetic | concrete `Int` / `Float` | numeric sum |
| `-` | `lhs - rhs` | arithmetic | concrete `Int` / `Float` | numeric difference |
| `++` | `lhs ++ rhs` | array concat | concrete arrays | concatenated array |
| `==` | `lhs == rhs` | equality | concrete scalar | concrete `Bool` |
| `!=` | `lhs != rhs` | equality | concrete scalar | concrete `Bool` |
| `<` | `lhs < rhs` | ordering | concrete `Int` / `Float` | concrete `Bool` |
@@ -40,12 +41,13 @@
2. unary `!` `-`
3. `*` `/`
4. `+` `-`
5. `==` `!=` `<` `<=` `>` `>=`
6. `&&`
7. `||`
8. `&`
9. `//`
10. `default`
5. `++`
6. `==` `!=` `<` `<=` `>` `>=`
7. `&&`
8. `||`
9. `&`
10. `//`
11. `default`
同じ優先順位の二項演算子は左結合である。
`default` は右結合である。
@@ -55,6 +57,15 @@
`+` `-` `*` `/` は具体的な `Int` / `Float` に対する四則演算である。
詳しくは [Arithmetic Expression](./expression/arithmetic.md) を参照する。
## Array concat operator
`++` は concrete array 同士を連結する演算子である。
要素は変換されず、左辺の要素の後に右辺の要素が並ぶ。
```dcdl
["read", "write"] ++ ["admin"]
```
## Logical and comparison operators
`!` `&&` `||` は concrete `Bool` に対する論理演算である。
+1
View File
@@ -116,6 +116,7 @@ rec
```text
+ - * / 四則演算
++ 配列結合
! && || 論理演算
== != < <= > >= 比較式
& 制約合成