fix print!
This commit is contained in:
parent
73e60b8ced
commit
8535225167
|
@ -227,9 +227,10 @@ fn fold {
|
|||
}
|
||||
}
|
||||
|
||||
& TODO: optimize these with base :conj!
|
||||
fn map {
|
||||
"Maps a function over a list: returns a new list with elements that are the result of applying the function to each element in the original list. E.g., `map ([1, 2, 3], inc) &=> [2, 3, 4]`."
|
||||
"Maps a function over a list: returns a new list with elements that are the result of applying the function to each element in the original list. E.g., `map ([1, 2, 3], inc) &=> [2, 3, 4]`. With one argument, returns a function that is a mapper over lists; with two, it executes the mapping function right away."
|
||||
(f as :fn) -> map (f, _)
|
||||
(kw as :keyword) -> map (kw, _)
|
||||
(f as :fn, xs) -> {
|
||||
fn mapper (prev, curr) -> append (prev, f (curr))
|
||||
fold (mapper, xs, [])
|
||||
|
@ -242,6 +243,7 @@ fn map {
|
|||
|
||||
fn filter {
|
||||
"Takes a list and a predicate function, and returns a new list with only the items that produce truthy values when the function is called on them. E.g., `filter ([1, 2, 3, 4], odd?) &=> [1, 3]`."
|
||||
(p? as :fn) -> filter (p?, _)
|
||||
(p? as :fn, xs) -> {
|
||||
fn filterer (filtered, x) -> if p? (x)
|
||||
then append (filtered, x)
|
||||
|
@ -256,7 +258,7 @@ fn keep {
|
|||
}
|
||||
|
||||
fn append {
|
||||
"Adds an element to a list or set."
|
||||
"Adds an element to a list."
|
||||
() -> []
|
||||
(xs as :list) -> xs
|
||||
(xs as :list, x) -> base :conj (xs, x)
|
||||
|
@ -273,7 +275,7 @@ fn append! {
|
|||
|
||||
fn concat {
|
||||
"Combines two lists, strings, or sets."
|
||||
(x as :string, y as :string) -> base :concat (x, y)
|
||||
(x as :string, y as :string) -> "{x}{y}"
|
||||
(xs as :list, ys as :list) -> base :concat (xs, ys)
|
||||
& (xs as :set, ys as :set) -> base :concat (xs, ys)
|
||||
(xs, ys, ...zs) -> fold (concat, zs, concat (xs, ys))
|
||||
|
|
11
src/base.rs
11
src/base.rs
|
@ -259,8 +259,15 @@ pub fn or<'src>(x: &Value<'src>, y: &Value<'src>) -> Value<'src> {
|
|||
|
||||
// TODO: fix this: x is a list of all the args passed to Ludus's print!
|
||||
pub fn print<'src>(x: &Value<'src>) -> Value<'src> {
|
||||
// dbg!(x)
|
||||
println!("{}", x);
|
||||
let Value::List(args) = x else {
|
||||
unreachable!("internal Ludus error")
|
||||
};
|
||||
let out = args
|
||||
.iter()
|
||||
.map(|val| format!("{val}"))
|
||||
.collect::<Vec<_>>()
|
||||
.join("");
|
||||
println!("{out}");
|
||||
Value::Keyword("ok")
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user