3 个不稳定版本
0.1.1 | 2024 年 1 月 27 日 |
---|---|
0.1.0 | 2024 年 1 月 27 日 |
0.0.0 | 2024 年 1 月 21 日 |
#625 在 开发工具
13KB
297 行
common_risp
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))
);
}