// 2024-12-02 var std = @import( "std" ); var printf = std.fmt.printf; pub var main = fn:!void { printf( "hello \(s)\n", .( "world" ) ).!; // more width }; var Node = fn:type | T :type | { return record |N| ( .value :T, .next :?*N = nil, ); }; var RedBlackTree = fn:type | T :type | { // XXX how to access `pub var` from a `fn` context ? pub var Color = enum ( .black, .red, ); pub var Node = record |N| ( .color :Color, .left :?*N, .right :?*N, .value :T, :size = fn:usize | node :*N | { return 1 + if( node.*.left ) |left | { left .size() } else { 0 } + if( node.*.right ) |right| { right.size() } else { 0 } ; }; ); return class |RBT| ( .root :?*Node = nil, :size = fn:usize | rbt :RBT | { // return if( rbt.root ) |r| { r.size() } else { 0 }; var r = rbt.root orelse { return 0; }; return r.size(); }; ); }; var partition = fn:usize | T :type, slice :[]mut T | { if( slice.len == 0 ) { return 0; } var last = slice[ slice.len - 1 ]; // var mut i :usize = 0; // var mut i = 0$usize; var mut i = usize( 0 ); }; pub var qsort = fn:void | T :type, slice :[]mut T | { if( slice.len <= 1 ) { return; }; var pivot = partition( T, slice ); qsort( T, slice[..pivot] ); qsort( T, slice[pivot..] ); };