avris / qc
Requires
- php: >=5.4
- symfony/console: ^2.0 || ^3.0
Requires (Dev)
- codeception/aspect-mock: *
- phpunit/phpunit: ~4.8.0
This package is auto-updated.
Last update: 2024-09-16 08:16:26 UTC
README
这款软件处于早期开发阶段
目标是创建一种 简单(从复杂度角度,而非易用性)的编程语言,它将具有相当 简洁的语法,将利用 Unicode 的力量,最重要的是——将 很有趣 来创建;()
文档
完整文档可在 docs.avris.it/qc 找到
示例代码
此程序返回给定数字的 Collatz 序列 长度
# Length of Collatz sequence
(⪑☯1:{Aa⇓↓a1>:aa2%a3*1+a2/▲=}A↹)I☯
@0 => 1
@1 => 1
@2 => 2
@3 => 8
@4 => 3
@5 => 6
@[0 1 2 3 4 5] => [1 1 2 8 3 6]
第一行显然只是一个注释,第二行是实际代码,其余的是测试用例——当你在测试模式下运行代码时,它会运行输入 0
并检查输出是否为 1
,然后运行 1
并期望输出 1
,依此类推。注意,在最后一个用例中,如何简单地将函数应用于整个数组的每个元素。
(⪑☯1:...)
定义了一个接受 1
个参数(即其阶数为一个)的函数 ☯
,并允许我们使用数组技巧(⪑
切换)。
{...:...}
表示:当第一部分为真时,持续执行第二部分。
A
是一个包含空数组的预定义变量。我们将其放入堆栈。
a
、b
、c
、d
... 是传递给函数的参数(这里我们只有一个,即 a
,因为我们的阶数为一个)。
我们将 a
的值(a⇓
)放入堆栈。
函数 ↓
从堆栈中取出两个元素(即 A
和 a⇓
),并将 a⇓
放入数组 A
的末尾。
我们将变量 a
和数字 1
放入堆栈。函数 >
取出它们并比较。如果 a > 1
,它将 1 (true)
放回堆栈,否则放回 0 (false)
。因此,这将是我们的 while 条件。
然后我们有 aa2%a3*1+a2/▲=
,这基本上是 a = a % 2 ? 3*a+1 : a/2
,但用逆波兰表示法(RPN)编写,并用 ▲
函数作为三元运算符。
while 循环结束后,我们将数组 A
的长度(A↹
)放入堆栈。这是函数的返回值。当然,我们可以返回整个数组(A
)或其连接内容(AS⥋
)。
I☯
表示我们将输入 I
放入堆栈,并对其应用我们的函数。
安装
composer require avris/qc
使用
在线
在线解释器可在 qc.avris.it/try 找到
控制台
vendor/bin/qc '2 2+' # 4
vendor/bin/qc '2 2+' -d # 4, debug data displayed
vendor/bin/qc '2 I+' 5 # 7
vendor/bin/qc '"foo""bar"+' # "foobar"
vendor/bin/qc -f demo/collatz.qc 5 # 6, source code was read from file
vendor/bin/qc -f demo/collatz.qc -s # run related test suite
vendor/bin/qc -f demo/collatz.qc 5 -dl 300 # debug mode with increased lines limit
PHP 中
try {
$qc = new QC();
$result = $qc->run($code, $input, new EchoOutput());
echo 'Result: ' . $result;
} catch (QCException $e) {
echo 'Error: ' . $e->getMessage();
}
版权
- 作者: Andre Prusinowski (Avris.it)
- 许可证: MIT