on master help sign in
rut
commit17e350db7f467106c68a5bb730921617d59c593d authoriko <mail@iko.soy> dateMon 26 Aug 2024, 01:55 (2 years ago) parentc67f957
1 file changed+26
nock/src/jets.rs+26
nock/src/jets.rs+26
@@ -75,6 +75,7 @@ pub fn generate_jets() -> Jets {
7575 (302196507237993702819920888576650809366, REV),
7676 (111192034817574564051316537756194881830, RIP),
7777 (194882429025651072335997865399571359986, RUN),
78+ (52890757765966568893620799383929397067, RUT),
7879 ])
7980}
8081
@@ -776,3 +777,28 @@ static RUN: Jet = |ctx, n| {
776777
777778 Rc::new(Noun::Atom(target))
778779};
780+
781+static RUT: Jet = |ctx, n| {
782+ let (bite, b) = n.as_cell().unwrap();
783+ let (b, gate) = b.as_cell().unwrap();
784+
785+ let bite = bite.as_bite().unwrap();
786+ let mut b: Atom = b.as_atom().unwrap().clone();
787+
788+ let bits = bite.bits();
789+ let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
790+
791+ let mut target = Vec::new();
792+
793+ while b > ctx.big_uints.zero {
794+ target.push(
795+ (*slam(ctx, gate.clone(), Rc::new(Noun::Atom(&mask & &b))))
796+ .as_atom()
797+ .unwrap()
798+ & &mask,
799+ );
800+ b = b >> bits;
801+ }
802+
803+ Noun::list(target.iter().cloned().map(Noun::Atom))
804+};