@ Bo Jacobi: thanks for the quick reply...
Meanwhile I did this:
r=. i.3
ti=: 3 : 'if. y <: 0 do. 1 else. 0 end.'
r,. ti r
0 1
1 1
2 1
and this
p1=: 3 : 'f=. y + 1'
r,. p1 r
0 1
1 2
2 3
and I guess I got your point; btw
r,. !r
0 1
1 1
2 2
looks alright...
remains the question, how would I go about to
properly feed a range to a function which contains an "if." clause..?
M.
>consider the meaning of
> if. 0 1 2 <: 0
>OK?
>
>--- Den søn 16/8/09 skrev Martin Kreuzer <[email protected]>:
>
> > Fra: Martin Kreuzer <[email protected]>
> > Emne: [Jprogramming] Recursive function (newbie level)
> > Til: [email protected]
> > Dato: søndag 16. august 2009 15.14
> > Hi all -
> >
> > While doing a little piece on computing Fibonacci numbers
> > and the
> > Golden ratio, I came across this behaviour of recursive
> > functions
> > which I do not yet understand:
> >
> > (A)
> > Defining a simple range as
> > r:=. 2 + i.7
> > 2 3 4 5 6 7 8
> > I have been able to print e.g. a small table of sines
> > > r,. sin r
> > 2 0.909297427
> > 3 0.141120008
> > 4 _0.756802495
> > 5 _0.958924275
> > 6 _0.279415498
> > 7 0.656986599
> > 8 0.989358247
> >
> > (B)
> > Playing around with the factorial I found that
> >
> > (B1) using this definition (from: Burke/Reiter, Brief
> > Reference)
> > fac=: 3 : 'if. y <: 1 do. 1 else. y * fac
> > y - 1 end.'
> > I will get
> > fac 5
> > 120
> > alright, but
> > > r,. fac r
> > 2 2
> > 3 3
> > 4 4
> > 5 5
> > 6 6
> > 7 7
> > 8 8
> > which seems strange (at least to me).
> >
> > (B2) using this slightly more elaborate definition
> > fac=: 3 : 0
> > n=. y
> > select. n
> > case. 0 do. f=. 1
> > case. 1 do. f=. 1
> > case. do. f=. n *
> > fac (n-1)
> > end.
> > f
> > )
> > I will get
> > fac 5
> > 120
> > as above, but
> > > r,. fac r
> > |stack error: fac
> > | f=.n* fac(n-1)
> >
> > (C)
> > Something similar happens with ((sorry for probable too may
> > parentheses))
> > fib=: 3 : 0
> > n=. y
> > select. n
> > case. 0 do. f=. 0
> > case. 1 do. f=. 1
> > case. do. f=.
> > (fib (n-1)) + (fib (n-2))
> > end.
> > f
> > )
> > fib 13
> > 233
> > computes alright, but this throws an error
> > > r,. fib r
> > |stack error: fib
> > | f=.(fib(n-1))+( fib(n-2))
> >
> > Could anybody shed some light on this..? Thanks, M.
> >
> >
> >
> > ---
> > avast! Antivirus: Outbound message clean.
> > Virus Database (VPS): 090815-0, 15.08.2009
> > Tested on: 16.08.2009 13:14:34
> > avast! - copyright (c) 1988-2009 ALWIL Software.
> > http://www.avast.com
> >
> >
> >
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
>
> Find din nye laptop på kelkoo.dk. Se de
> gode tilbud her - http://dk.yahoo.com/r/pat/mm
>----------------------------------------------------------------------
>For information about J forums see http://www.jsoftware.com/forums.htm
---
avast! Antivirus: Outbound message clean.
Virus Database (VPS): 090815-0, 15.08.2009
Tested on: 16.08.2009 14:37:02
avast! - copyright (c) 1988-2009 ALWIL Software.
http://www.avast.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm