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

Reply via email to