Skip to content

Commit

Permalink
🐄
Browse files Browse the repository at this point in the history
  • Loading branch information
AlephAlpha committed Aug 16, 2024
1 parent 402a0fb commit 318c93d
Show file tree
Hide file tree
Showing 21 changed files with 164 additions and 77 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# Revision history for Nekomata

## 0.8.0.0 -- Unreleased

* New builtin: `\lastValue`.
* A new mode `last` is added. It outputs the last possible result. You can switch to this mode by the `-t` flag in the command line or the `\Mode last` command in the REPL.

### Breaking changes

* `\oneValue` is renamed to `\firstValue`.
* The built-in function `\normalForm` was removed in version 0.7.0.0. Its short name `¤` is now reused for the new function `\lastValue`.

## 0.7.0.0 -- 2024-08-10

* Added examples to the documentation of built-in functions and particles.
Expand Down
2 changes: 1 addition & 1 deletion Nekomata.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ library
Nekomata.CodePage
Nekomata.Eval
Nekomata.Particle
Nekomata.Result

-- Modules included in this library but not exported.
other-modules:
Expand All @@ -80,7 +81,6 @@ library
Nekomata.Parser.Data
Nekomata.Parser.Program
Nekomata.Program
Nekomata.Result

-- LANGUAGE extensions used by modules in this package.
-- other-extensions:
Expand Down
13 changes: 5 additions & 8 deletions analysis/Ideas.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,9 @@
此处总结一下 Code Page 中已有但还没有用上的字符:

```
¤.W`w
.W`w
```

`¤` 原本是用于 `\normalForm` 函数。但这个函数由于定义不清晰且在现有的答案中没有用到,因此被移除了。这个字符空了出来,可以用于其它的内置函数。

如果 CodePage 中的 256 个字符都用完了,可以考虑用像 05AB1E 那样,用 `.` 开头的字符来表示双字节的内置函数。现在的 CodePage 还没有用完,先不考虑这个问题,但 `.` 也先不要用掉。

LiberationMono 字体所支持的字符列举于[此文件](analysis/LiberationMonoGlyphs.txt),以供选取。
Expand All @@ -26,10 +24,9 @@ LiberationMono 字体所支持的字符列举于[此文件](analysis/LiberationM
* `1` 排到第十四,是最常见的常量。
* `ç``\cons0`)能排到第十八。这个完全出乎我的意料,因为很多别的 golfing 语言中根本没有这个操作。它的作用是给列表加一个 0,通常是配合 `\head``\last``\minimum``\maximum` 等函数使用,来处理空列表的特殊情况。需要看一看其它语言是怎么处理空列表的。
* 与 non-deterministic 机制有关的操作,除了 `=``\eq`)没有一个排到前二十。排最高的是第二十四的 `a``\allValues`)。
* 在两个字符的组合中,排前六的分别是 `ᶦ{``ᵖ{``ʷ{``ˡ{``ᵑ{``ᶠ{`。也许可以像 Vyxal 等语言一样,让这些助词自动开启 block,省去一个 `{`。不过另外一些助词通常只修饰单个 built-in,自动开启 block 反而会额外需要一个 `}`。尤其是 ``````,两种用法都很常见,不好取舍。详见 [`analysis/particles.txt`](particles.txt),以及下文的[关于助词](#关于助词)
* `{$` 在两个字符的组合中排第七,`{:` 排第八。这两个组合没有特别的意义,只是因为 `\dup``\swap` 是最常用的两个操作,因此它们的组合也很常用。
* `Jᵐ` 在两个字符的组合中排第八,和 `{:``ᵐ{``Ťđ` 并列。这完全出乎我的意料。`J` 是将输入 non-deterministic 地拆成若干部分,`` 是对后一个函数进行 map,这两个操作的组合可以看作 Haskell 中 `concatMap` 的反操作。可能 `concatMap` 也是一个常用的操作,但由于 ```j``\concat`)之间会插入别的操作,所以没有出现在这个统计结果中。可以考虑加上 `\concatMap``\unconcatMap` 两个助词。目前已加上。
* `Ťđ` 在两个字符的组合中也排第八,和 `{:``Jᵐ``ᵐ{` 并列。这个组合是将二维列表转置,然后进行 unpair 操作。看起来确实比较常用。先等更多的解答出现再决定是否增加这个 built-in。
* 在两个字符的组合中,排前六的分别是 `ᶦ{``ᵖ{``ʷ{``ˡ{``ᶠ{``ᵑ{`。也许可以像 Vyxal 等语言一样,让这些助词自动开启 block,省去一个 `{`。不过另外一些助词通常只修饰单个 built-in,自动开启 block 反而会额外需要一个 `}`。尤其是 ``````,两种用法都很常见,不好取舍。详见 [`analysis/particles.txt`](particles.txt),以及下文的[关于助词](#关于助词)
* `{$` 在两个字符的组合中排第六,`{:` 排第八。这两个组合没有特别的意义,只是因为 `\dup``\swap` 是最常用的两个操作,因此它们的组合也很常用。
* `Ťđ` 在两个字符的组合中也排九,和 `{:``Jᵐ``ᵐ{` 并列。这个组合是将二维列表转置,然后进行 unpair 操作。看起来确实比较常用。先等更多的解答出现再决定是否增加这个 built-in。
* `Ňᵖ{` 在三个字符的组合中排第一,也许值得为它增加一个助词。
* 统计结果与其它语言的差异,除了考虑到语言本身的特点之外,还要考虑到语言的使用者的偏好。目前 Nekomata 的使用者基本上只有我自己,解答的也主要是我感兴趣的题目类型,string 相关的题目较少,ascii-art 更是完全没有。

Expand Down Expand Up @@ -216,6 +213,6 @@ LiberationMono 字体所支持的字符列举于[此文件](analysis/LiberationM

目前的文档还很不完善。需要增加更多的例子,以及更详细的说明。

- [ ] 为每个函数和助词增加例子,并把这些例子用作单元测试。目前函数的部分已完成,助词的部分还没有
- [ ] 为每个函数和助词增加例子,并把这些例子用作单元测试。目前函数的部分已完成。助词的部分每个只有一个例子,需要给不同的用法都增加例子。由于一些助词的用法可能要大改(见[关于助词](#关于助词)),等改过之后再增加例子
- [ ] 重写现有的 Tutorial。考虑分成多个文件,每个文件只讲一个主题。
- [ ] REPL 的 `\Info` 命令,可以考虑改成能一次输出多个函数的信息。
5 changes: 3 additions & 2 deletions analysis/corpus.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ u∕u
ŢƵḟ
pƆᵖ≤
ᶦP
ᵃp=al
ᵃp=
Ƃ£E∫Ɔž≥
pZ‼l
Ä$Ç$→/
Expand Down Expand Up @@ -49,7 +49,7 @@ rFŗ∑
#Ry
RG1Ĉ
Ö∫¬∑T
pᵖ½al
pᵖ½
ᵒ+j∕=
N;<
2ᶦ{:←*→
Expand Down Expand Up @@ -226,6 +226,7 @@ x:→&xï@Ŝ
ŢṂaş
ᵐ{į→ŋ+}≡H
Cᶦ{ᵈsf¡C
ᴶ{ᵉhl=
ʷ{ᶜŤĕ≡¿}Ø=
↕ᵃ{2Šᵐɗ"∩<"<60b}-_På
:←/∏*
Expand Down
14 changes: 7 additions & 7 deletions analysis/freq_1gram.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{ : 81
{ : 82
$ : 56
= : 54
= : 55
: : 50
+ : 46
∑ : 39
Expand All @@ -14,8 +14,8 @@ x : 30
- : 26
1 : 25
j : 25
ᵉ : 24
o : 24
ᵉ : 23
ç : 23
2 : 23
, : 22
Expand All @@ -26,14 +26,14 @@ o : 24
ᵒ : 20
↔ : 20
đ : 19
a : 19
ĭ : 18
u : 18
ᵖ : 18
~ : 18
S : 17
l : 17
p : 17
a : 17
l : 16
ĉ : 16
Ɔ : 15
Z : 15
Expand Down Expand Up @@ -78,6 +78,7 @@ c : 10
% : 10
ᶠ : 10
N : 10
h : 10
O : 10
i : 10
z : 10
Expand All @@ -88,7 +89,6 @@ f : 9
ŗ : 9
ᵗ : 9
≈ : 9
h : 9
C : 9
P : 8
Ƶ : 8
Expand All @@ -104,6 +104,7 @@ H : 8
4 : 8
¿ : 8
ᵈ : 8
ᴶ : 7
Ä : 7
/ : 7
Ħ : 7
Expand All @@ -113,7 +114,6 @@ H : 8
ä : 7
Ř : 7
¢ : 7
ᴶ : 6
ᵏ : 6
Ö : 6
ƃ : 6
Expand Down
13 changes: 6 additions & 7 deletions analysis/freq_2gram.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
∕u : 4
£E : 4
Ɔž : 4
{ᵉ : 4
1Ĩ : 4
ᵏ{ : 4
ᵒ{ : 4
Expand All @@ -33,7 +34,6 @@ pƆ : 3
ž≥ : 3
Z‼ : 3
$ᵑ : 3
{ᵉ : 3
?} : 3
}Ø : 3
Ø= : 3
Expand Down Expand Up @@ -70,6 +70,7 @@ pN : 3
ᶻL : 3
x→ : 3
+$ : 3
ᴶ{ : 3
*$ : 3
#← : 3
}a : 3
Expand Down Expand Up @@ -98,7 +99,6 @@ qŁ : 2
lo : 2
Ɔᵖ : 2
p= : 2
al : 2
$Ç : 2
→/ : 2
çƆ : 2
Expand All @@ -119,7 +119,6 @@ $Ĭ : 2
rF : 2
G1 : 2
· : 2
½a : 2
+j : 2
xᵐ : 2
ᶜt : 2
Expand Down Expand Up @@ -228,6 +227,8 @@ x- : 2
ŋ+ : 2
+} : 2
{ᵈ : 2
ᵉh : 2
hl : 2
≡¿ : 2
2Š : 2
}- : 2
Expand All @@ -238,7 +239,6 @@ RS : 2
ɔ$ : 2
jŢ : 2
↔$ : 2
ᴶ{ : 2
ž¿ : 2
çṀ : 2
3~ : 2
Expand Down Expand Up @@ -317,7 +317,6 @@ d! : 1
ᵖ≤ : 1
ᶦP : 1
ᵃp : 1
=a : 1
Ƃ£ : 1
E∫ : 1
pZ : 1
Expand Down Expand Up @@ -833,6 +832,7 @@ Cᶦ : 1
sf : 1
f¡ : 1
¡C : 1
l= : 1
{ᶜ : 1
ᶜŤ : 1
Ťĕ : 1
Expand Down Expand Up @@ -921,6 +921,7 @@ I} : 1
}ṁ : 1
Sj : 1
Ţ½ : 1
½a : 1
ađ : 1
R↔ : 1
$∆ : 1
Expand Down Expand Up @@ -995,8 +996,6 @@ Nᵖ : 1
Ťů : 1
ů} : 1
şᵉ : 1
ᵉh : 1
hl : 1
l→ : 1
→Ð : 1
,Ţ : 1
Expand Down
9 changes: 4 additions & 5 deletions analysis/freq_3gram.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ tut : 2
ᵒ{ᵋ : 2
ᵖ{: : 2
ŋ+} : 2
ᵉhl : 2
3~ᵑ : 2
ʸ{ˣ : 2
∆±ĉ : 2
Expand Down Expand Up @@ -96,8 +97,6 @@ d!" : 1
pƆᵖ : 1
Ɔᵖ≤ : 1
ᵃp= : 1
p=a : 1
=al : 1
Ƃ£E : 1
£E∫ : 1
E∫Ɔ : 1
Expand Down Expand Up @@ -165,8 +164,6 @@ G1Ĉ : 1
∫¬∑ : 1
·T : 1
pᵖ½ : 1
ᵖ½a : 1
½al : 1
ᵒ+j : 1
+j∕ : 1
j∕= : 1
Expand Down Expand Up @@ -697,6 +694,9 @@ Cᶦ{ : 1
ᵈsf : 1
sf¡ : 1
f¡C : 1
ᴶ{ᵉ : 1
{ᵉh : 1
hl= : 1
ʷ{ᶜ : 1
{ᶜŤ : 1
ᶜŤĕ : 1
Expand Down Expand Up @@ -903,7 +903,6 @@ Nᵖ{ : 1
ů}a : 1
aşᵉ : 1
şᵉh : 1
ᵉhl : 1
hl→ : 1
l→Ð : 1
,Ţ← : 1
Expand Down
7 changes: 3 additions & 4 deletions analysis/freq_4gram.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ orld : 1
rld! : 1
ld!" : 1
pƆᵖ≤ : 1
ᵃp=a : 1
p=al : 1
Ƃ£E∫ : 1
£E∫Ɔ : 1
E∫Ɔž : 1
Expand Down Expand Up @@ -104,8 +102,6 @@ rFŗ∑ : 1
RG1Ĉ : 1
Ö∫¬∑ : 1
∫¬∑T : 1
pᵖ½a : 1
ᵖ½al : 1
ᵒ+j∕ : 1
+j∕= : 1
2ᶦ{: : 1
Expand Down Expand Up @@ -507,6 +503,9 @@ Cᶦ{ᵈ : 1
{ᵈsf : 1
ᵈsf¡ : 1
sf¡C : 1
ᴶ{ᵉh : 1
{ᵉhl : 1
ᵉhl= : 1
ʷ{ᶜŤ : 1
{ᶜŤĕ : 1
ᶜŤĕ≡ : 1
Expand Down
4 changes: 2 additions & 2 deletions analysis/freq_5gram.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ o, Wo : 1
World : 1
orld! : 1
rld!" : 1
ᵃp=al : 1
Ƃ£E∫Ɔ : 1
£E∫Ɔž : 1
E∫Ɔž≥ : 1
Expand Down Expand Up @@ -71,7 +70,6 @@ R1cʳ× : 1
{$Zᵉ% : 1
ṀRᶠ¦Ṁ : 1
Ö∫¬∑T : 1
pᵖ½al : 1
ᵒ+j∕= : 1
2ᶦ{:← : 1
ᶦ{:←* : 1
Expand Down Expand Up @@ -365,6 +363,8 @@ Cᶦ{ᵈs : 1
ᶦ{ᵈsf : 1
{ᵈsf¡ : 1
ᵈsf¡C : 1
ᴶ{ᵉhl : 1
{ᵉhl= : 1
ʷ{ᶜŤĕ : 1
{ᶜŤĕ≡ : 1
ᶜŤĕ≡¿ : 1
Expand Down
4 changes: 2 additions & 2 deletions analysis/particles.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
particle : with "{" / total
ᵈ : 0 / 8
ᵉ : 0 / 23
ᵉ : 0 / 24
ʳ : 0 / 5
ˣ : 0 / 4
ᶾ : 0 / 1
Expand All @@ -12,8 +12,8 @@ particle : with "{" / total
ᵒ : 4 / 20
ᵗ : 2 / 9
ᵚ : 2 / 8
ᴶ : 2 / 6
ʲ : 2 / 5
ᴶ : 3 / 7
ʰ : 1 / 2
ᵑ : 6 / 11
ᵖ : 11 / 18
Expand Down
6 changes: 6 additions & 0 deletions app/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ optMode =
<> short '1'
<> help "Show only the first value"
)
<|> flag'
LastValue
( long "last"
<> short 't'
<> help "Show only the last value"
)
<|> flag'
CountValues
( long "count"
Expand Down
Loading

0 comments on commit 318c93d

Please sign in to comment.