[REBOL] Encouraging functional programming Re:(4)

1999-11-27 Thread erich

My understanding was that tail recursion ( or its optimized implementation )
gives a (properly written) recursive program the efficiency of an
iterative program.

Yes, because such implementations avoid "real" recursion, i.e. when they
encounter tail recursive function calls they do not push some kind of
return address on a stack. Of course, such an implementation of tail
recursion is desirable, but it is iteration, in fact.

I just wanted to point out that recursion generally is not a benefit at
all. It is also no special sign of functional programming languages, you
can do recursion in most imperative languages as well. The good thing about
functional programming languages is merely the fact that symbols are
evaluated regardless wether they're bound to data or to a function. This
allows high level of data and functional abstraction without having to
extend the core language.

BTW, with trow and catch it should theoretically be possible to implement
multitasking. Does anybody know how the "evaluation loop" at top level of
REBOL works? (not that I want to implement multitasking, that's far beyond
my capabilities, I'm just curious...)

Greetings,

Erich





[REBOL] cgi Re:

1999-11-27 Thread marco

Well ... I have been waiting for a reply to the message below. Has there
been a reply and I missed it? I have been trying to use rebol for CGI
scripts which is the main reason why I started to use it. People have send
CGI examples to me, which work for them but they don't work for me. I have
by now tried to run rebol cgi scripts on WIN95 and PWS4, WIN98 and PWS4,
Windows NTWS and PWS4, Windows NT Server and even tried it on a SuSe Linux
and Apache. But nothing has worked for me so far.
A previous message to the list said that rebol cgi did not need any setting
up on the server, it only needs to have the rebol.exe in a directory where
the scripts are. - Doesn't work for me. I have also seen an example of rebol
to be used as follows ...

SCRIPT LANGUAGE="REBOL" RUNAT="SEREVR"

etc ... I would be VERY VERY VERY interested in knowing how to set this up
or in knowing where I could host my web site that supports this.
Any help would be great as I just don't know what else to do.

Regards,
Marco Mark
- Original Message -
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
Sent: Friday, November 26, 1999 10:39 AM
Subject: [REBOL] cgi


 hello,

 I just discovered Rebol last week and have become a little obsessed with
its
 simple beauty. Hence I want to re-write all my perl scripts and bin it for
 good.

 I've been desperately tring to get rebol cgi support set up on my
macintosh
 and a linux box. To no avail.  I've never had to tinker with the internals
 of Apache before, nor Webstar. Any of you rebol kings have some advice?

 I'm running:
 Rebol ppc
 Webstar 2.0
 RedHat 5.2

 Thanks,

 Sam Phillips

 --
 Head of Design  Multimedia

 Brand:
 Promotion, merchandising, design, licensing, sponsorship, event services.

 34 St Enoch Square   t: +44 (0) 141 221 0342
 Glasgow G1 1DF   f: +44 (0) 141 221 5456
 Scotland, UK i: +44 (0) 141 221 5859






[REBOL] Encouraging functional programming Re:(5)

1999-11-27 Thread 70740 . 503

Erich,

I timed three methods of filling a block with successive integers from `
1 to 1000. The times are for 1000 iterations. It would seem that head
recursion is rather slow.

Jerry,

 time-block/reps [a: array 0  for i 1 1000 1 [insert tail a i]] 1000
0:00:11
 time-block/reps [a: array 0  for i 1000 1 -1 [insert a i]] 1000
0:00:31
 time-block/reps [a: array 1000  for i 1 1000 1 [poke a i i]] 1000
0:00:09
 a
== [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4...




[REBOL] Encouraging functional programming Re:(5)

1999-11-27 Thread Jordan . Henderson



 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
 Sent: Saturday, November 27, 1999 5:57 AM
 To: [EMAIL PROTECTED]
 Subject: [REBOL] Encouraging functional programming Re:(4)
 
 
 My understanding was that tail recursion ( or its optimized 
 implementation )
 gives a (properly written) recursive program the efficiency of an
 iterative program.
 
 Yes, because such implementations avoid "real" recursion, 
 i.e. when they
 encounter tail recursive function calls they do not push some kind of
 return address on a stack. Of course, such an implementation of tail
 recursion is desirable, but it is iteration, in fact.
 
 I just wanted to point out that recursion generally is not a 
 benefit at
 all. 

The benefit of recursion is economy of expression.  In some cases
a recursive solution is clearer and more maintainable than it's 
iterative equivalent.

Econonomy of expression, along with portability, is the primary reason we
use high level programming languages.

   It is also no special sign of functional programming 
 languages, you
 can do recursion in most imperative languages as well.

Recursion is associated with functional programming in that one
typically implements iterative constructs with recursion in
functional programming languages.  Many functional programming
languages allow for iteration without recursion, but recursion
is the typical way of implementing iterative algorithms in
functional programming languages.

While you can perform recursion in most imperative languages, 
you would only resort to recursion in cases where it's clearly
the obvious clean solution.  In functional languages, you use
recursion more often.  

Many functional programming languages have no iterative
construct except recursion.  It would be difficult to program in
an imperative language with recursion as your only interative
construct, it's usually unnatural in functional languages to 
use anything but recursion for this.  Thus, recursion and functional
programming are often associated together.

  The 
 good thing about
 functional programming languages is merely the fact that symbols are
 evaluated regardless wether they're bound to data or to a 
 function. This
 allows high level of data and functional abstraction without having to
 extend the core language.
 
 BTW, with trow and catch it should theoretically be possible 
 to implement
 multitasking. Does anybody know how the "evaluation loop" at 
 top level of
 REBOL works? (not that I want to implement multitasking, 
 that's far beyond
 my capabilities, I'm just curious...)
 
 Greetings,
 
 Erich
 
 
 

-Jordan Henderson
[EMAIL PROTECTED]



[REBOL] Q on Array of Objects Re:

1999-11-27 Thread lmecir

You wrote:

 I am considering writing an app that would create several hundred or
a few thousand copies of a single object. One way to keep track of them
is to use an array. A script that tests this syntax is below along with
a run which does a "print mold" on the array. It appears that the
functions(methods) in the object are replicated for each instance
of the object in the array. Is this true? Is this efficient? I am more
used to OO languages like C++ where only the data fields would
be replicated and there would be only one copy of the functions
for all the instances of the class. Is there a better way to do this? 


(rest snipped)

Actually, the functions are not replicated. Cf:

a: func [] [print "done"]
b: :a
same? :a :b

The functions are the same as in the former example. HTH

Ladislav



[REBOL] Encouraging functional programming Re:(6)

1999-11-27 Thread 70740 . 503

Jordan,

I calculate the Fibonnacci numbers without recursion using REBOL. For
example

 fib 100
== 3.54224848179262E+20


How would you calculate it with recursion?

Jerry



[REBOL] listening at ports

1999-11-27 Thread anon_emouse


Does anyone have a simple listen script?  I want to see what my web
browser is sending to the web server.

I tried the various examples I've seen, and followed the howtos on
rebol.com, but can't get it to function.

Thanks,

---
Regards,Graham Chiu
gchiuatcompkarori.co.nz
http://www.compkarori.com/dynamo - The Homebuilt Dynamo
http://www.compkarori.com/dbase - The dBase bulletin



[REBOL] Interface and Implementation Re:(4)

1999-11-27 Thread Al . Bri

Elan wrote:
 Hope this helps,...

Thanks, Elan. I've been comparing my REBOL code too closely to my C++
code and forgetting that REBOL words are far more "smarter" than C++
variables. The closest relative in C++ is smart pointers.

Andrew Martin
[EMAIL PROTECTED]
http://members.xoom.com/AndrewMartin/
Online @ 33,600 Baud!
--



[REBOL] listening at ports Re:

1999-11-27 Thread Al . Bri

Graham Chiu wrote:
 Does anyone have a simple listen script?  I want to see what my web
browser is sending to the web server.

I'm sure there's some useful scripts at:
http://www.rebol.org
Try the proxy. That might serve your puposes.

Andrew Martin
[EMAIL PROTECTED]
http://members.xoom.com/AndrewMartin/
Online @ 33,600 Baud!
--



[REBOL] listening at ports Re:

1999-11-27 Thread Andrew . M . Grossman

You might want to try Sterling's proxy (avail. on rebol.org) with a small modification 
to save to a file all data passed through.  I'd imagine that this shouldn't be 
difficult, although I haven't looked at the code recently.  Good luck!

--
Andrew Grossman
http://web.dartmouth.edu/~grossman/pgp.html

--- [EMAIL PROTECTED] wrote:
Does anyone have a simple listen script?  I want to see what my web
browser is sending to the web server.

I tried the various examples I've seen, and followed the howtos on
rebol.com, but can't get it to function.

Thanks,
--- end of quote ---



[REBOL] Encouraging functional programming Re:(7)

1999-11-27 Thread lmecir

[EMAIL PROTECTED] wrote:


Jordan,

I calculate the Fibonnacci numbers without recursion using REBOL. For
example

 fib 100
== 3.54224848179262E+20


How would you calculate it with recursion?

Jerry

fib: func [first second n] [

either n = 1 [first] [

either n = 2 [second] [

fib second first + second n - 1

]

]

]

 fib 1.0 1.0 100
== 3.54224848179262E+20

Ladislav




[REBOL] Encouraging functional programming Re:(7)

1999-11-27 Thread 70740 . 503

Brent, 

I'm confused. You seem to say that 

 test: func [n /local sum] [sum: 0 for i 1 n 1 [sum: sum + i]]

is not functional since it contains an index. On the other you seem to say
it is functional in that the output depends only on the input without any
side effects.
Where did I go wrong?

Jerry



[REBOL] Q on Array of Objects Re:(2)

1999-11-27 Thread wwink2


I tried this in the script/run included here. It doesn't seem
to work when the functions are methods in an object -
or else the syntax is a little more complex. I've tried
a couple of variations of the syntax, but still get
error msgs rather than an answere one way or the
other.



Lasislav wrote:

 Actually, the functions are not replicated. Cf:
 
 a: func [] [print "done"]
 b: :a
 same? :a :b
 
 The functions are the same as in the former example. HTH
 
 Ladislav


 [EMAIL PROTECTED] wrote:
 
  I am considering writing an app that would create several hundred or
 a few thousand copies of a single object. One way to keep track of them
 is to use an array. A script that tests this syntax is below along with
 a run which does a "print mold" on the array. It appears that the
 functions(methods) in the object are replicated for each instance
 of the object in the array. Is this true? Is this efficient? I am more
 used to OO languages like C++ where only the data fields would
 be replicated and there would be only one copy of the functions
 for all the instances of the class. Is there a better way to do this? 
 

= start of script

REBOL [ Title: "test05 "
Author: " ww "
  ]

count-x:  1

myobj:  [
 x: (count-x)
 y: 5
 myfun: func [ x ] [ return x ]
 myfun2: func [ ] [ return y ]
]


xarr: array 5

for i 1 5 1 [ do rejoin compose ["xarr/" (i) ": (make object! myobj  ) "  ]
   count-x: count-x + 1
 ]


print "demo: show myfun exists/works"

print  join  "xarr/1/myfun : " xarr/1/myfun 7
print  join  "xarr/2/myfun : " xarr/2/myfun 7.43

print " are they the same? "

print same? :xarr/1/myfun   :xarr/2/myfun

= end of script

= start of run

Script started on Sat Nov 27 14:10:20 1999
l
 do load %t05.r
demo: show myfun exists/works
xarr/1/myfun : 7
xarr/2/myfun : 7.43
 are they the same? 
** Script Error: xarr is missing its x argument.
** Where: print same? :xarr/1/myfun :xarr/2/myfun
 q

Script done on Sat Nov 27 14:10:41 1999

= end of run







[REBOL] Q on Array of Objects Re:(3)

1999-11-27 Thread Al . Bri

 o!: make object! [
[s: "OneTwoThree"
[St: func [] [s]
[]
 o1: make o! [
[o1: "O1"
[]
 o2: make o! [
[o2: "O2"
[]
 probe o2

make object! [
s: "OneTwoThree"
St: func [][s]
o2: "O2"
]
 o2/St: "Hello"
== "Hello"
 probe o2

make object! [
s: "OneTwoThree"
St: "Hello"
o2: "O2"
]
 probe o1

make object! [
s: "OneTwoThree"
St: func [][s]
o1: "O1"
]

Words in objects which refer to functions are copied. Therefore the
object will be bigger than expected.

Andrew Martin
Who believes simplicity is a virtue...
[EMAIL PROTECTED]
http://members.xoom.com/AndrewMartin/
Online @ 33,600 Baud!
--



[REBOL] Re: Tail recursion in REBOL 2.0

1999-11-27 Thread ole_f

Hello John

On 27-Nov-99, you wrote:

 If I've comprehended that correctly, a good language should
 eliminate tail
 recursion and replace it by iteration. This is a feature of most
 CommonLISP systems and Scheme.
 
 Well, that would probably require some static analysis of the
 REBOL program, something which is probably not part of the
 philosophy of the REBOL interpreter. (Am I mistaken?)
 
 You don't need to do static analysis, you just have to notice
 that the current function is calling another function, and that
 the result of that call is only going to be returned, i.e., you
 are making a function call followed immediately by a return.
 If you replace the CALL/RET pair with a JMP, and adjust the stack,
 you should be all set.

That's definitely what I would consider static analysis. Additionally,
remember that in REBOL you can define 'return to do so much else than
simply return a value (in fact, 'return is just a value like everything
else, and thus can be redefined), so you will never know what the value of
'return will be just after returning from a function call.

Though you should be able to remove tail recursion in the specific example
of

return some-function arg1 arg2 ... argn

But using 'return isn't the only means of returning a value. Consider this
(untested, though):

fac1: func [n] [
  either (n  1) [return n * fac1 n - 1] [return 1]
]

fac2: func [n] [
  either (n  1) [n * fac2 n - 1] [1]
]

fac1 and fac2 are semantically identical. But how would you dynamically see
that you should eliminate tail recursion in fac2? Sure, you could do it by
looking forward some bytes (seeing that there isn't anything more to do in
the body of the function), but if you should do this properly, program
execution will probably be slowed down.

Regards
Ole



[REBOL] Encouraging functional programming Re:(8)

1999-11-27 Thread 70740 . 503

Jordan,

I am impressed with your clever function. It seems to take only 10% more
time than my non-recursive version.

Jerry



[REBOL] cookies Re:(2)

1999-11-27 Thread anon_emouse

From: [EMAIL PROTECTED]
You could use my cookie-client script that is somewhere on rebol.org.  It 
allows you to read access webpages while sending them cookies.
I'm planning when I have a few minutes free on revising it to work a bit 
more nicely and automatically remember cookies and the like.  Sort of a 
smart read http:// ...

Hi,

I got it going after hacking it a bit.  Since I didn't really understand how 
the script worked, I experimented.  There was a problem as the set-cookie: 
header that comes from the server is the only header that is repeated ( 
multiple cookies ), whereas the http-cookie only saves the last set-cookie: 
header.

Anyway, I've got it so that the script logs on to MTNSMS's password page, 
grabs the session and persistent cookies, and then posts the message with 
these cookies to the send-message asp script.  End result - my cellphone 
rings with a text message!

It looks ugly, but it works.

---
Graham Chiu

__
Get Your Private, Free Email at http://www.hotmail.com



[REBOL] listening at ports Re:(2)

1999-11-27 Thread anon_emouse

In article [EMAIL PROTECTED], [EMAIL PROTECTED]
DU writes
You might want to try Sterling's proxy (avail. on rebol.org) with a small 
modification to save to a file all data passed through.  I'd imagine that this 
shouldn't be difficult, although I haven't looked at the code recently.  Good 
luck!

Looks like it's what I needed - though I have managed to nail my script
now.

---
Regards,Graham Chiu
gchiuatcompkarori.co.nz
http://www.compkarori.com/dynamo - The Homebuilt Dynamo
http://www.compkarori.com/dbase - The dBase bulletin



[REBOL] amiga pipebridge 2.0

1999-11-27 Thread timrue

for those interested, I've updated the Amiga pipebridge and GUI for it,
so it works with rebol v2.2.0.1.1

the new version is at http://www.mindspring.com/~timrue/pbgui2.0.lha

If it's not there when you try, then try again later. It'll get there.
(it's done, I just need to update my web site).

Who knows, maybe rebol updates won't break it next time. :)

For those that don't know what it is, it's a bridge between rebol and the
Amiga OS and Arexx ports. Allowing Rebol to send and receive to/from
Amiga applications.

---
*3 S.E.A.S - Virtual Interaction Configuration (VIC) - VISION OF VISIONS!*
   *~ ~ ~  Advancing How we Perceive and Use the Tool of Computers!*
Timothy Rue  What's *DONE* in all we do?  *AI PK OI IP OP SF IQ ID KE*
Email @ mailto:[EMAIL PROTECTED]  INPUT-(Processing)-OUTPUTv
Web @ http://www.mindspring.com/~timrue/  ^9



[REBOL] blocks inside strings

1999-11-27 Thread anon_emouse


The user's guide says with regard to string values

^[words...] executes a block 

yet, print "^[print now]" on 2.2.0.3.1

results in

[print now]

rather than executing the block.

---
Regards,Graham Chiu
gchiuatcompkarori.co.nz
http://www.compkarori.com/dynamo - The Homebuilt Dynamo
http://www.compkarori.com/dbase - The dBase bulletin



[REBOL] blocks inside strings Re:

1999-11-27 Thread icimjs

Hi Graham,

you're right, it appears that functionality is still missing.

At 08:08 PM 11/28/99 +1200, you wrote:

The user's guide says with regard to string values

^[words...] executes a block 

yet, print "^[print now]" on 2.2.0.3.1

results in

[print now]

rather than executing the block.

---
Regards,Graham Chiu
gchiuatcompkarori.co.nz
http://www.compkarori.com/dynamo - The Homebuilt Dynamo
http://www.compkarori.com/dbase - The dBase bulletin






[REBOL] blocks inside strings Re:(2)

1999-11-27 Thread anon_emouse

In article [EMAIL PROTECTED],
[EMAIL PROTECTED] writes
Hi Graham,

you're right, it appears that functionality is still missing.


I'll fire a bug report off to feedback then.

---
Regards,Graham Chiu
gchiuatcompkarori.co.nz
http://www.compkarori.com/dynamo - The Homebuilt Dynamo
http://www.compkarori.com/dbase - The dBase bulletin