! return a dim-dimensional basis vector corresponding to the nth dimension : (basis) ( n dim -- v ) [ 0 ] replicate [ 1 ] 2dip [ set-nth ] keep ; ! return a list of all basis vectors : (bases) ( dim -- {v} ) [ iota ] keep [ (basis) ] curry map ; ! compute the gradient of a scalar field at a point : (grad) ( quot: ( loc -- field ) step loc -- v ) [ dup ] dip [ length (bases) swap [ v*n ] curry map ] [ [ v+ ] curry map ] [ ] tri [ swap ] 2dip pick call [ swap map ] dip [ - ] curry map swap v/n ; inline : grad ( quot: ( loc -- field ) loc -- v ) 0.01 swap (grad) ; inline