Spyke
concatenative·Concatenative ProgrammingbyTushta

Factor Cannot apply “call” to a run-time computed value

I wanted to map over a nested array in factor so I created a helper function:

: nested-map ( a quote -- a' ) swap [ over map ] map nip ;

which i then called with

{ { 1 2 } { 3 4 } } [ 1 + ] nested-map

But when I call it I get the error from the title.

If I just paste the body of the function it works as intended:

{ { 1 2 } { 3 4 } } [ 1 + ] swap [ over map ] map nip

So I guess I have two questions: is there a better way to achieve the original goal, but also how am I supposed to create higher order functions without getting this error?

View original on programming.dev

Thanks to johnb on the Factor's discord channel I got answers to these two questions:

In terms of nicer way to do a nested map nicely, fried quotations are the answer:

'[ _ map ] map

and in order to call a quotation inside a word definition, one needs to use call( stack effect ) form:

: nested-map ( a quote -- a' ) '[ _ '[ _ call( x -- x' ) ] map ] map ;

2

You reached the end