[ macro z: factorial base case when n is (z)ero ]sx [sx [ x is our dump register; get rid of extraneous copy of n we no longer need]sx 1 [ return value is 1 ]sx q] [ abort processing of calling macro ]sx sz [ macro f: factorial ]sx [ d [ duplicate the input (n) ]sx 0 =z [ if n is zero, call z, which stops here and returns 1 ]sx d [ otherwise, duplicate n again ]sx 1 - [ subtract 1 ]sx lfx [ take the factorial ]sx * [ we have (n-1)!; multiply it by the copy of n to get n! ]sx ] sf [ macro b(n,k): binomial function (n choose k). straightforward RPN version of formula.]sx [ sk [ remember k. stack: n ]sx d [ duplicate: n n ]sx lfx [ call factorial: n n! ]sx r [ swap: n! n ]sx lk [ load k: n! n k ]sx - [ subtract: n! n-k ]sx lfx [ call factorial: n! (n-k)! ]sx lk [ load k: n! (n-k)! k ]sx lfx [ call factorial; n! (n-k)! k! ]sx * [ multiply: n! (n-k)!k! ]sx / [ divide: n!/(n-k)!k! ]sx ] sb 5 3 lb x p [print(5 choose 3)]sx