A rusty lisp inspired by Clojure for usage as simple configuration language.
```rust extern crate risp;
use risp::evalrispscript; use risp::types::RispType::Int; use risp::core::createcoreenvironment;
#[test] fn testminimalexample() { let mut env = createcoreenvironment(); env.set("var", Int(2));
let risp_script = "(+ 40 var)";
let result = eval_risp_script(risp_script, &mut env);
assert_eq!(result, Ok(Int(42)));
} ```
```clojure ; The risp kitchen sink - yes this line is a single line comment.
(def my_int 2)
(def myvector [1 myint 3])
(def repeated (rep 2 1 2 3)) ; repeat [1 2 3] 2 times => [1 2 3 1 2 3]
(comment (this is not evaluated) (it can have multiple lines) (but must have valid risp syntax))
; This last expression (it's a map in this case) will be returned. {:yes true :no false :added (+ myint 20) :multiplied (* myint 20) :repeated repeated :myvector myvector :mymap {:key myint} :mystring "Hello" :mydoresult (do (def myint2 20) (+ myint myint2))} ```
```rust extern crate risp;
use risp::evalrispscript; use risp::core::createcoreenvironment;
struct SimpleSong {
name: String,
speed: i64,
notes: Vec
fn testconverttostructexample() { let mut env = createcoreenvironment();
let risp_script = r#"
{
:name "Name"
:speed 220
:notes [1 2 3]
}"#;
let result = eval_risp_script(risp_script, &mut env).unwrap();
let simple_song = SimpleSong {
name: result.get("name").unwrap().unwrap(),
speed: result.get("speed").unwrap().unwrap(),
notes: result.get("notes").unwrap().unwrap()
};
assert_eq!(simple_song.name, "Name");
assert_eq!(simple_song.speed, 220);
assert_eq!(simple_song.notes, vec![1, 2, 3]);
}
```