Feat: add slicing words

This commit is contained in:
2026-02-28 02:37:09 +01:00
parent 0a186f774c
commit 730ddfb716
6 changed files with 46 additions and 13 deletions

View File

@@ -58,7 +58,7 @@ pub(super) fn simple_op(name: &str) -> Option<Op> {
"nand" => Op::Nand,
"nor" => Op::Nor,
"ifelse" => Op::IfElse,
"pick" => Op::Pick,
"select" => Op::Pick,
"sound" => Op::NewCmd,
"." => Op::Emit,
"rand" => Op::Rand(None),

View File

@@ -507,12 +507,12 @@ pub(super) const WORDS: &[Word] = &[
varargs: false,
},
Word {
name: "pick",
name: "select",
aliases: &[],
category: "Logic",
stack: "(..quots n --)",
desc: "Execute nth quotation (0-indexed)",
example: "{ 1 } { 2 } { 3 } 2 pick => 3",
example: "{ 1 } { 2 } { 3 } 2 select => 3",
compile: Simple,
varargs: true,
},

View File

@@ -186,6 +186,26 @@ pub(super) const WORDS: &[Word] = &[
compile: Param,
varargs: true,
},
Word {
name: "slice",
aliases: &[],
category: "Sample",
stack: "(v.. --)",
desc: "Divide sample into N equal slices",
example: r#""break" s 8 slice 3 pick ."#,
compile: Param,
varargs: true,
},
Word {
name: "pick",
aliases: &[],
category: "Sample",
stack: "(v.. --)",
desc: "Select which slice to play (0-indexed, wraps)",
example: r#""break" s 8 slice 3 pick ."#,
compile: Param,
varargs: true,
},
Word {
name: "voice",
aliases: &[],