| | |
Scheme procedure to capitalize a string
Thread Solved |
•
•
Join Date: Feb 2008
Posts: 65
Reputation:
Solved Threads: 0
Hello, and thank you for helping me today! I am working on a scheme procedure that takes a string as its input, capitalizes every letter in the string, and then prints out the result. This is a homework assignment, and we are supposed to use another procedure that we wrote earlier on, which capitalizes a single character entered by the user. This procedure, which I wrote and which works fine, is included at the top of my current procedure. Right now, I have the following:
But it is not working. I get an error when I run the procedure, which says this: "string-append: expects type <string> as 2nd argument, given: #<void>; other arguments were: """
What am I doing wrong here? Can someone help me with this?
Thank you in advance!
; defining the procedure char_toupper to convert a lower case character to upper case
(define char_toupper (lambda (myChar)
; defining x as the ASCII value of myChar
(define x (char->integer myChar))
; defining y as x-32
(define y (- x 32))
; if statement for while x is less than 91 (already uppercase)
(if (< x 91)
; if it is already uppercase, just display it
(display myChar)
; otherwise, if x is greater than 96 (lowercase)
(if (> x 96)
; then display the character equivalent to the ASCII value given by y
(display (integer->char y))
)
)
)
)
(define string_toupper (lambda (myString newString i)
(if (< i (string-length myString))
(string_toupper myString (string-append newString (char_toupper (string-ref myString i))) (+ 1 i))
)
(display newString)
)
)
(string_toupper (read) "" 0)But it is not working. I get an error when I run the procedure, which says this: "string-append: expects type <string> as 2nd argument, given: #<void>; other arguments were: """
What am I doing wrong here? Can someone help me with this?
Thank you in advance!
•
•
Join Date: May 2008
Posts: 93
Reputation:
Solved Threads: 10
0
#2 Nov 12th, 2009
•
•
•
•
But it is not working. I get an error when I run the procedure, which says this: "string-append: expects type <string> as 2nd argument, given: #<void>; other arguments were: """
What am I doing wrong here?
(display <>) has no return value. That is, (void? (display "a")) returns #t...But you are using your char_toupper function as though it were returning an upper case character. If you want to use it like this, then you should modify it so that it actually returns the uppercase character to be used in string-append. Alternatively, you could modify your string_toupper function so that it does not require a result from char_toupper. That is, simply output the uppercase characters one character at a time (as your char_toupper currently does), and do not construct an entirely new string of uppercase characters... This would actually be faster since you would not require string-append, which takes O(n) time (although may not be the purpose of the assignment... it depends on whether or not your string_toupper need return a value...)
Hope that makes sense!
Last edited by n1337; Nov 12th, 2009 at 10:19 am.
Optimist: This glass is half full!
Pessimist: This glass is half empty!
Engineering Consultant: This glass is twice as big as it needs to be...
Pessimist: This glass is half empty!
Engineering Consultant: This glass is twice as big as it needs to be...
•
•
Join Date: Feb 2008
Posts: 65
Reputation:
Solved Threads: 0
0
#3 Nov 12th, 2009
•
•
•
•
The issue is that your char_toupper function actually returns void... In fact, the display function(display <>)has no return value. That is,(void? (display "a"))returns #t...
But you are using your char_toupper function as though it were returning an upper case character. If you want to use it like this, then you should modify it so that it actually returns the uppercase character to be used in string-append. Alternatively, you could modify your string_toupper function so that it does not require a result from char_toupper. That is, simply output the uppercase characters one character at a time (as your char_toupper currently does), and do not construct an entirely new string of uppercase characters... This would actually be faster since you would not require string-append, which takes O(n) time (although may not be the purpose of the assignment... it depends on whether or not your string_toupper need return a value...)
Hope that makes sense!
My procedure now works well, and is ready to go, I think!! Thank you very much for the help, n1337!! I greatly appreciate it.
![]() |
Similar Threads
- Help With Scheme Procedure (Legacy and Other Languages)
- pls help : procedure and function use for other unit (Pascal and Delphi)
- Scheme Help (Legacy and Other Languages)
- convert string into object (Visual Basic 4 / 5 / 6)
- Calling and executing stored Procedure (C)
- Scheme to Python (Computer Science)
- Searching a record (Pascal and Delphi)
- Compound Control Class (Pascal and Delphi)
- Unicode and Strings (Visual Basic 4 / 5 / 6)
- Help with casting (Java)
Other Threads in the Legacy and Other Languages Forum
- Previous Thread: Urgent help with vhdl neeeded
- Next Thread: MatLab, find area under experimental data plot
Views: 1016 | Replies: 2
| Thread Tools | Search this Thread |
Tag cloud for Legacy and Other Languages





