We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
考虑到现在对通常函数的定义方式尚未稳固下来,仍可能会有会导致要修改每处通常函数定义的重构(先前已经过两次),目前刻意压低了实现的通常函数的数量。
由于解析代码时会单独对待运算符,运算符相比于这里列出的其他通常函数要更加基本。 为体现这种特征,也许可以分出两份默认作用域:第一份只含运算符;第二份延伸自第一份,包含这里提及的所有通常函数。
优先级已在文档中列出,这里不复述。
a |> b(...)
b(a, ...)
a # b
a
b
a or b
a || b
a and b
a && b
not a
!a
a == b
a != b
a === b
a !== b
a < b
a > b
a <= b
a >= b
a ~ b
~ b
a + b
a - b
a * b
a // b
a % b
a ^ b
a ** b
a d b
d b
a d% b
d% b
%
在考虑去掉 d%,毕竟其实质上只是 d… - 1,其存在还可能导致混淆(比如第一眼把 3d%4 看成了 3d、% 与 4)。
d%
d… - 1
3d%4
3d
4
reroll(3d10, 2)
…(3#d10, 2)
、
explode(3d10, 8)
…(3#d10, 8)
目前仅实现以闭包作为判断条件。
备注: 表中的 ..=2、8.. 是设想中(优先级很低)的范围运算符(参见 #8)。最理想的情况下,投掷表达式的概率可以准确算出来,那么就无需暴力投掷,可以直接根据范围运算符产出结果。
..=2
8..
不过目前的想法就只是设置执行上限,防止理论或事实上的死循环。
abs(a)
count(a)
a.length
count(a, f)
a.filter(f).length
has?(a, b)
a.indexOf(b) >= 0
sum(a)
product(a)
min(a)
max(a)
all?(a)
a.every((x) => x)
any?(a)
a.some((x) => x)
sort(a)
a.sort((x, y) => x - y)
sort(a, f)
reverse(a)
a.reverse()
concat(a, b)
[...a, ...b]
prepend(a, b)
[b, ...a]
append(a, b)
[...a, b]
at(a, b)
a[b]
at(a, b, c)
b < a.length ? a[b] : c
duplicate(a, b)
Array(b).fill(a)
#
flatten(a, b)
a.flat(b)
flattenAll(a)
a.flat(Infinity)
这方面还有很多可以实现的函数,但目前就打算实现这么多了。
map(a, f)
flatMap(a, f)
filter(a, f)
foldl(a, b, f)
foldr(a, b, f)
unfold(a)
iterate(a)
head(a)
tail(a)
last(a)
init(a)
take(a, b)
takeWhile(a, f)
drop(a, b)
dropWhile(a, f)
zip(a, b)
zipWith(a, b, f)
目前就打算实现这么多。
inspect(a)
if(a, b, else: c)
The text was updated successfully, but these errors were encountered:
#/2 不能作为通常函数。 在没有涉及到闭包时是否是通常函数没有区别(如 3#d4、3#(3#d4))。 另一方面,闭包参数会赋予变量名称,导致变量的值固定。 因此像是 3#\(x->x).(d4) 这种表达式,如果将 #/2 处理通常函数,其右侧就会是 d4 一次运算后固定下来的值,最终的结果是重复同一个值三次。 但实际期待的行为是 # 右侧的表达式每次都要重新执行,变量只在闭包内部固定(比如 3#\(x->3#x).(d4),内层数组间的元素相同,外层数组相独立)。
#/2
3#d4
3#(3#d4)
3#\(x->x).(d4)
d4
3#\(x->3#x).(d4)
Sorry, something went wrong.
也许 **/2 作为幂运算符更合适。 那么 ^/2 是作为别名,是像 //2 那样提示使用 **/2,还是干脆不识别?
**/2
^/2
//2
sum/1
补遗:
identity/1
id/1
shuffle/1
rem/2
mod/2
%/2
sortDesc/*
keepHighest/*
keepLowest/*
dropHighest/*
dropLowest/*
[kd][hl]/*
++/2
<>/2
No branches or pull requests
考虑到现在对通常函数的定义方式尚未稳固下来,仍可能会有会导致要修改每处通常函数定义的重构(先前已经过两次),目前刻意压低了实现的通常函数的数量。
运算符
由于解析代码时会单独对待运算符,运算符相比于这里列出的其他通常函数要更加基本。
为体现这种特征,也许可以分出两份默认作用域:第一份只含运算符;第二份延伸自第一份,包含这里提及的所有通常函数。
优先级已在文档中列出,这里不复述。
虽然是运算符,但不是通常函数
a |> b(...)
b(a, ...)
a # b
a
次b
,返回包含那些求值结果的列表。关键词形式的运算符
a or b
a || b
a and b
a && b
not a
!a
一般的运算符
a == b
、a != b
a === b
、a !== b
a < b
、a > b
、a <= b
、a >= b
a ~ b
、~ b
a
默认为 1。a + b
、a - b
、a * b
a // b
a % b
a
必须是非负数,b
必须是正数。a ^ b
a ** b
a d b
、d b
、a d% b
、d% b
a
默认为 1,。%
事实上导致结果 -1在考虑去掉
d%
,毕竟其实质上只是d… - 1
,其存在还可能导致混淆(比如第一眼把3d%4
看成了3d
、%
与4
)。可以直接用括号调用的
投骰子
reroll(3d10, 2)
、…(3#d10, 2)
、`…(…,、
…(…, ..=2)`explode(3d10, 8)
、…(3#d10, 8)
、`…(…,、
…(…, 8..)`目前仅实现以闭包作为判断条件。
备注:
表中的
..=2
、8..
是设想中(优先级很低)的范围运算符(参见 #8)。最理想的情况下,投掷表达式的概率可以准确算出来,那么就无需暴力投掷,可以直接根据范围运算符产出结果。不过目前的想法就只是设置执行上限,防止理论或事实上的死循环。
列表实用
abs(a)
count(a)
a.length
count(a, f)
a.filter(f).length
has?(a, b)
a.indexOf(b) >= 0
sum(a)
product(a)
min(a)
max(a)
all?(a)
a.every((x) => x)
any?(a)
a.some((x) => x)
sort(a)
a.sort((x, y) => x - y)
sort(a, f)
a.sort((x, y) => x - y)
reverse(a)
a.reverse()
concat(a, b)
[...a, ...b]
prepend(a, b)
[b, ...a]
append(a, b)
[...a, b]
at(a, b)
a[b]
at(a, b, c)
b < a.length ? a[b] : c
duplicate(a, b)
Array(b).fill(a)
b
的语义是?如果把b
固定下来,会导致通常函数间的语义不一致;如果不固定,那除了能被捕获外就和#
没区别了。flatten(a, b)
a.flat(b)
flattenAll(a)
a.flat(Infinity)
这方面还有很多可以实现的函数,但目前就打算实现这么多了。
函数式
map(a, f)
flatMap(a, f)
filter(a, f)
foldl(a, b, f)
foldr(a, b, f)
unfold(a)
iterate(a)
head(a)
tail(a)
last(a)
init(a)
take(a, b)
takeWhile(a, f)
drop(a, b)
dropWhile(a, f)
zip(a, b)
zipWith(a, b, f)
目前就打算实现这么多。
内部调试
inspect(a)
控制流
if(a, b, else: c)
The text was updated successfully, but these errors were encountered: