avris/qc

相当简洁的编程语言

v1.0.3 2019-10-15 21:34 UTC

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 是一个包含空数组的预定义变量。我们将其放入堆栈。

abcd... 是传递给函数的参数(这里我们只有一个,即 a,因为我们的阶数为一个)。

我们将 a 的值(a⇓)放入堆栈。

函数 从堆栈中取出两个元素(即 Aa⇓),并将 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 放入堆栈,并对其应用我们的函数。

安装

直接从 Git 仓库 或使用 Composer 安装

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();
}

版权