Some readme elaboration, but mostly cons
This commit is contained in:
parent
928c9b91ed
commit
001e35755d
5 changed files with 31 additions and 29 deletions
18
Readme.org
18
Readme.org
|
|
@ -301,8 +301,11 @@ This contains any executable target of this project. Notably the main shell file
|
||||||
Note: this section will not show the status of each item unless you are viewing it with a proper orgmode viewer.
|
Note: this section will not show the status of each item unless you are viewing it with a proper orgmode viewer.
|
||||||
Note: this section only tracks the state of incomplete TODO items. Having everything on here would be cluttered.
|
Note: this section only tracks the state of incomplete TODO items. Having everything on here would be cluttered.
|
||||||
|
|
||||||
|
*** TODO append -> cons
|
||||||
|
*** TODO bool cast
|
||||||
*** TODO Quote function
|
*** TODO Quote function
|
||||||
*** TODO Eval function
|
*** TODO Eval function
|
||||||
|
*** TODO lambda
|
||||||
*** TODO Lex function
|
*** TODO Lex function
|
||||||
*** TODO Input function
|
*** TODO Input function
|
||||||
*** TODO Load (load a script) function
|
*** TODO Load (load a script) function
|
||||||
|
|
@ -310,8 +313,7 @@ Pull/Refactor the logic out of the configure functions.
|
||||||
Optionally return a list of new variables and/or functions?
|
Optionally return a list of new variables and/or functions?
|
||||||
Will need a concatenate function for tables
|
Will need a concatenate function for tables
|
||||||
*** TODO Main shell calls Load function on arg and exits
|
*** TODO Main shell calls Load function on arg and exits
|
||||||
*** TODO Can enter multiple lines of text, with formatting in repl
|
*** TODO FINISH DOCUMENTATION
|
||||||
*** TODO append -> cons
|
|
||||||
*** TODO Shell module
|
*** TODO Shell module
|
||||||
**** TODO Support for single quoting string literals
|
**** TODO Support for single quoting string literals
|
||||||
**** TODO Args parsing helper
|
**** TODO Args parsing helper
|
||||||
|
|
@ -320,15 +322,16 @@ Will need a concatenate function for tables
|
||||||
**** TODO Foreground process TTY
|
**** TODO Foreground process TTY
|
||||||
**** TODO Background processes
|
**** TODO Background processes
|
||||||
**** TODO Update config env var docstring with functions loaded or unloaded
|
**** TODO Update config env var docstring with functions loaded or unloaded
|
||||||
*** TODO lambda
|
**** TODO ESSENTIAL: DOCUMENT POSIX MODULE
|
||||||
*** TODO bool cast
|
*** TODO Can enter multiple lines of text, with formatting in repl
|
||||||
|
*** TODO Rename to Flesh
|
||||||
|
*** TODO Create a dedicated community channel on matrix.sunnypup.io
|
||||||
|
*** TODO Post to relevant channels
|
||||||
|
*** TODO Custom ast pretty print
|
||||||
*** TODO file operations
|
*** TODO file operations
|
||||||
**** TODO read-to-string
|
**** TODO read-to-string
|
||||||
**** TODO write-to-file
|
**** TODO write-to-file
|
||||||
*** TODO Rename to Flesh
|
|
||||||
*** TODO Pick through core/ast and make sure no unnessesary moves are happening
|
*** TODO Pick through core/ast and make sure no unnessesary moves are happening
|
||||||
*** TODO Create a dedicated community channel on matrix.sunnypup.io
|
|
||||||
*** TODO Post to relevant channels
|
|
||||||
*** TODO Network library
|
*** TODO Network library
|
||||||
**** TODO HTTP Client
|
**** TODO HTTP Client
|
||||||
**** TODO TCP Stream client
|
**** TODO TCP Stream client
|
||||||
|
|
@ -336,4 +339,3 @@ Will need a concatenate function for tables
|
||||||
**** TODO TCP Listener
|
**** TODO TCP Listener
|
||||||
**** TODO HTTP Listener
|
**** TODO HTTP Listener
|
||||||
**** TODO UDP Listener
|
**** TODO UDP Listener
|
||||||
*** TODO Custom ast pretty print
|
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,13 @@ pub mod strings;
|
||||||
/// any kind of further configuration data into a symtable
|
/// any kind of further configuration data into a symtable
|
||||||
pub fn static_stdlib(syms: &mut SymTable) -> Result<(), String> {
|
pub fn static_stdlib(syms: &mut SymTable) -> Result<(), String> {
|
||||||
syms.insert(
|
syms.insert(
|
||||||
"append".to_string(),
|
"cons".to_string(),
|
||||||
Symbol {
|
Symbol {
|
||||||
name: String::from("append"),
|
name: String::from("cons"),
|
||||||
args: Args::Infinite,
|
args: Args::Infinite,
|
||||||
conditional_branches: false,
|
conditional_branches: false,
|
||||||
docs: append::APPEND_DOCSTRING.to_string(),
|
docs: append::CONS_DOCSTRING.to_string(),
|
||||||
value: ValueType::Internal(Rc::new(append::append_callback)),
|
value: ValueType::Internal(Rc::new(append::cons_callback)),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@
|
||||||
use crate::segment::{Ctr, Seg};
|
use crate::segment::{Ctr, Seg};
|
||||||
use crate::sym::SymTable;
|
use crate::sym::SymTable;
|
||||||
|
|
||||||
pub const APPEND_DOCSTRING: &str = "traverses any number of arguments collecting them into a list.
|
pub const CONS_DOCSTRING: &str = "traverses any number of arguments collecting them into a list.
|
||||||
If the first argument is a list, all other arguments are added sequentially to the end of the list contained in the first argument.";
|
If the first argument is a list, all other arguments are added sequentially to the end of the list contained in the first argument.";
|
||||||
|
|
||||||
pub fn append_callback(ast: &Seg, _syms: &mut SymTable) -> Result<Ctr, String> {
|
pub fn cons_callback(ast: &Seg, _syms: &mut SymTable) -> Result<Ctr, String> {
|
||||||
if let Ctr::Seg(ref s) = *ast.car {
|
if let Ctr::Seg(ref s) = *ast.car {
|
||||||
let mut temp = s.clone();
|
let mut temp = s.clone();
|
||||||
if let Ctr::Seg(ref list) = *ast.cdr {
|
if let Ctr::Seg(ref list) = *ast.cdr {
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ mod append_lib_tests {
|
||||||
use relish::stdlib::{dynamic_stdlib, static_stdlib};
|
use relish::stdlib::{dynamic_stdlib, static_stdlib};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_append_to_empty_list() {
|
fn test_cons_to_empty_list() {
|
||||||
let document = "(append () 1)";
|
let document = "(cons () 1)";
|
||||||
let result = "(1)";
|
let result = "(1)";
|
||||||
|
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
@ -19,8 +19,8 @@ mod append_lib_tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_multi_append_to_empty_list() {
|
fn test_multi_cons_to_empty_list() {
|
||||||
let document = "(append () 1 'two' 3.4)";
|
let document = "(cons () 1 'two' 3.4)";
|
||||||
let result = "(1 'two' 3.4)";
|
let result = "(1 'two' 3.4)";
|
||||||
|
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
@ -36,8 +36,8 @@ mod append_lib_tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_append_to_full_list() {
|
fn test_cons_to_full_list() {
|
||||||
let document = "(append (1 2) 3)";
|
let document = "(cons (1 2) 3)";
|
||||||
let result = "(1 2 3)";
|
let result = "(1 2 3)";
|
||||||
|
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
@ -53,8 +53,8 @@ mod append_lib_tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_mono_append() {
|
fn test_mono_cons() {
|
||||||
let document = "(append)";
|
let document = "(cons)";
|
||||||
let result = "(<nil>)";
|
let result = "(<nil>)";
|
||||||
|
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
@ -70,8 +70,8 @@ mod append_lib_tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_append_no_list() {
|
fn test_cons_no_list() {
|
||||||
let document = "(append 'test' 1 2 3)";
|
let document = "(cons 'test' 1 2 3)";
|
||||||
let result = "('test' 1 2 3)";
|
let result = "('test' 1 2 3)";
|
||||||
|
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ mod control_lib_tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_complex_case_call() {
|
fn test_complex_case_call() {
|
||||||
let document = "(if true (append () 1) 2)";
|
let document = "(if true (cons () 1) 2)";
|
||||||
let result = "(1)";
|
let result = "(1)";
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
static_stdlib(&mut syms).unwrap();
|
static_stdlib(&mut syms).unwrap();
|
||||||
|
|
@ -51,7 +51,7 @@ mod control_lib_tests {
|
||||||
fn test_let_multiphase_locals() {
|
fn test_let_multiphase_locals() {
|
||||||
let document = "(let (
|
let document = "(let (
|
||||||
(temp '1')
|
(temp '1')
|
||||||
(temp (append () temp '2')))
|
(temp (cons () temp '2')))
|
||||||
temp)";
|
temp)";
|
||||||
let result = "('1' '2')";
|
let result = "('1' '2')";
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
@ -67,7 +67,7 @@ mod control_lib_tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_let_multibody_evals() {
|
fn test_let_multibody_evals() {
|
||||||
let document = "(let ((temp '1')) temp (append () temp '2'))";
|
let document = "(let ((temp '1')) temp (cons () temp '2'))";
|
||||||
let result = "('1' '2')";
|
let result = "('1' '2')";
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
static_stdlib(&mut syms).unwrap();
|
static_stdlib(&mut syms).unwrap();
|
||||||
|
|
@ -84,9 +84,9 @@ mod control_lib_tests {
|
||||||
fn test_let_multiphase_local_multibody_evals() {
|
fn test_let_multiphase_local_multibody_evals() {
|
||||||
let document = "(let (
|
let document = "(let (
|
||||||
(temp '1')
|
(temp '1')
|
||||||
(temp (append () temp '2')))
|
(temp (cons () temp '2')))
|
||||||
(echo 'first body')
|
(echo 'first body')
|
||||||
(append temp '3'))";
|
(cons temp '3'))";
|
||||||
|
|
||||||
let result = "('1' '2' '3')";
|
let result = "('1' '2' '3')";
|
||||||
let mut syms = SymTable::new();
|
let mut syms = SymTable::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue