Home   Archive   Permalink



Slowly learning, bit confused

Hi, I'm trying a simple REBOL script that inputs a name and then prints it in uppercase (to practice using functions).
When it's run, the name is entered in lower case, the function is called but then when I try "print low-name up-name" (which should print the lower case version and upper case version), the original has been turned into upper.
I'm assuming it's the way I pass the variable to the function, but could do with a clue about where to fix it.
Thanks in advance
    
R E B O L [
     Title: "Brian Test Program"
     Version: 1.0.0
     Date: 14-Apr-2014
     Author: "Brian Turner"
     Purpose: (Test stuff out in Rebol)
]
    
{
This is a function that doesn't return a value (like a SUB)
- uses the "does" command
}
print-hello: does [print "Hello"]
    
{
This is a function that returns a value
- uses "func" command
}
upper-name: func [arg1] [return uppercase arg1]
    
;main program
prin "What is your name: "
low-name: input
print-hello
print low-name
up-name: upper-name low-name
prin [low-name "-> "]
print up-name

posted by:   Brain     14-Apr-2014/6:22:43-7:00



Hi Brian,
    
The 'uppercase functions actually alters the input string:
    
x: "asd"
== "asd"
>> uppercase x
== "ASD"
>> x
== "ASD"
    
'Sort and some other series manipulation functions do this. Use a copy of the string as the argument to the function:
    
upper-name: func [arg1] [uppercase copy arg1]
    
BTW, does [] is just a shortcut for func [][]. It still returns a value.
    
    


posted by:   Nick     14-Apr-2014/8:05:05-7:00



Thanks, that explains it. I couldn't find the command for just passing a copy of the original.
I think I also misunderstood the "does" block and assumed that as it didn't take a value then it didn't return anything to the code that called it.


posted by:   Brain     14-Apr-2014/11:25:39-7:00