Georg solved your problem, but in the future you can easily use Factors introspection to see why it complains about stack effects. For example, the first quotation given to the inner if is [ 0 ] and you can infer its stack effect:
IN: scratchpad [ 0 ] infer. ( -- x ) Then because the two quotations given to if must have the same stack effect, the second quotation must also have ( -- x ) which you can check like this: ! Needs to be declared because you are using locals IN: scratchpad SYMBOLS: amount coins cc denominations ; IN: scratchpad [ amount coins 1 - cc amount coins denominations at* drop - coins cc + ] infer. ( -- x x x x x ) Or you can manually count the stack delta. Local variables and numbers are +1, binary operations and drop -1 and at* is +/- 0: +1 +1 +1 -1 +1 +1 +1 +1 0 -1 -1 +1 +1 -1 [ amount coins 1 - cc amount coins denominations at* drop - coins cc + ] 1 + 1 + 1 - 1 + 1 + 1 + 1 + 1 + 0 - 1 - 1 + 1 + 1 - 1 = +5 2015-07-29 9:44 GMT+02:00 Iain Gray <iaing...@ednet.co.uk>: > why do I get the following error? > > Stack effect declaration is wrong > inferred ( x x x -- x x ) > declared ( amount coins -- ways ) > > from this lexical variable > > :: cc ( amount coins -- ways ) > 0 amount = [ 1 ] > [ 0 < amount 0 coins = or [ 0 ] > [ amount coins 1 - cc > amount coins denominations at* drop - coins cc + ] > if ] > if ; > > ------------------------------------------------------------------------------ > _______________________________________________ > Factor-talk mailing list > Factor-talk@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/factor-talk -- mvh/best regards Björn Lindqvist ------------------------------------------------------------------------------ _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk