: jgcd ( a b -- c ) dup zero? [ drop ] [ [ mod ] keep swap jgcd ] if ;