3 个不稳定版本

0.1.1 2024 年 1 月 27 日
0.1.0 2024 年 1 月 27 日
0.0.0 2024 年 1 月 21 日

#625开发工具

MIT 许可证

13KB
297

common_risp

GitHub license

Common RISP 是一个在 Rust 代码中运行的嵌入式 LISP 语言实现。

入门指南

以下代码使用 LISP 格式计算并打印数值。

fn main() {
    common_risp::compile!(
        (print 99)
        (print (+ 1 2 (* 3 4) 5))
    );
}

执行结果如下

 Compiling common_risp v0.0.0 (/home/myyrakle/Codes/Rust/common_risp/common_risp)
    Finished dev [unoptimized + debuginfo] target(s) in 0.10s
     Running `target/debug/common_risp`
99
20

更多详情

有关更多详情,请参阅 文档


lib.rs:

Common RISP 是一个在 Rust 代码中运行的嵌入式 LISP 语言实现。

入门指南

以下代码使用 LISP 格式计算并打印数值。

fn main() {
common_risp::compile!(
(print 99)
(print (+ 1 2 (* 3 4) 5))
);
}

执行结果如下

Compiling common_risp v0.0.0 (/home/myyrakle/Codes/Rust/common_risp/common_risp)
Finished dev [unoptimized + debuginfo] target(s) in 0.10s
Running `target/debug/common_risp`
99
20

运算符

RISP 提供了 +, -, *, /, rem, mod 作为基本算术运算符。其行为几乎与 LISP 相同。

fn main() {
common_risp::compile!(
(print (+ 1 2 3 4 5))
(print (- 10 20))
(print (* 10 20))
(print (/ 40 20))
(print (rem 10 3))
(print (mod 10 3))
);
}

提供了比较运算符 <, >, <=, >=, = 和 /=。

fn main() {
common_risp::compile!(
(print (< 10 20))
(print (< 10 20 30))
(print (> 10 20))
(print (<= 10 20))
(print (>= 10 20))
(print (= 10 20))
(print (/= 10 20))
);
}

提供了逻辑运算符 and, or 和 not。

fn main() {
common_risp::compile!(
(print (and true false))
(print (or true false))
(print (not true))
);
}

变量

RISP 通过 defvar 和 defparameter 函数提供了变量声明功能。

fn main() {
common_risp::compile!(
(defvar x 10)
(defparameter y 20)
(print (+ x y))
);
}

并且,您可以通过 setq 改变变量的值。

fn main() {
common_risp::compile!(
(defvar x 10)
(defparameter y 20)
(print (+ x y))
(setq x 30)
(setq y 40)
(print (+ x y))
);
}

函数

RISP 通过 defun 函数提供了函数声明功能。

fn main() {
common_risp::compile!(
(defun add (x:i32 y:i32) i32 (+ x y))
(print (add 10 20))
);
}

RISP 与 LISP 的区别在于增加了参数类型和返回类型以提供类型稳定性。然而,如果没有返回类型,则可以省略。

fn main() {
common_risp::compile!(
(defun print_add (x:i32 y:i32) (print (+ x y)))
(print_add 10 20)
);
}

IF

RISP 提供了 IF 语句。

fn main() {
common_risp::compile!(
(defvar x 10)
(defvar y 20)
(if (< x y) (print "x is less than y") (print "x is greater than or equal to y"))
);
}

互操作性

在 RISP 代码中定义的变量和函数也可以在 RISP 代码外部使用。

fn main() {
common_risp::compile!(
(defvar x 10)
(defun add (x:i32 y:i32) i32 (+ x y))
);

assert_eq!(x, 10);
assert_eq!(add(10, 20), 30);
}

同样,反之亦然。

fn main() {
let x = 10;

common_risp::compile!(
(defun add (x:i32 y:i32) i32 (+ x y))
(print (add x 20))
);
}

依赖关系