> I want to create a verb "defverb" such that
> 'myname' defverb '<my sentence>'
> assigns <my sentence> to a new verb 'myname'

A programming comparison on the web had this question:

> The problem: Write a function foo that takes a number n and returns  
> a function that takes a number i, and returns n incremented by i.

The concept of embedding context within a function definition is  
called a "closure".  So, I guess I'm asking is if there is a  
"standard" way to accomplish closures in J?

So, here's my solution (using the technique that Mr. Ric Sherlock just  
shared):

  foo =: 4 : ('(x)=: 3 : ((": y),''+y'')';'$0')
  foo
┌ 
─ 
┬ 
─ 
┬ 
───────────────────────┐
│4│:│(x)=: 3 : ((": y),'+y')│
│ │ │$0                     │
└ 
─ 
┴ 
─ 
┴ 
───────────────────────┘
  'bar' foo 7

  bar
┌─┬─┬───┐
│3│:│7+y│
└─┴─┴───┘
  bar 3
10

Is there a "better" way to do this?

Is there a way to define the function result of "foo" as a tacit  
function?

Is it necessary to define "foo" as a dyad?   Can't a monad return  
another monad as a result?  (Or, does that make it an adverb?)

Thanks!

-- 
Alan

Here are some samples of other languages:

> Lisp: Common Lisp (defun foo (n) (lambda (i) (incf n i)))
>
> Mathematica: foo = Module[{s=#},s+=# &] &
>
> Ruby: def foo (n) ; lambda {|i| n += i } ; end


----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to