开发者

Adding arguments to list causes error

I tried an example where we need to pass a list as arguments and if condition succeeds I want to add result to a new list.

Here's the code:

(define get-description
  (lambda (codeValue newList)
    (cond
      ((= (car codeValue) 1) (cons "A" newlist))
      ((= (car codeValue) 2)(cons "B" newlist))      
      ((= (car codeValue) 3) "C")
      (else "Negative numbers are not valid"))))

I pass this as the function call:

(get-description (list 1 2 3) (list))

I get output:

(cons "A" empty)

Output should just show: (A)

I am using DrRacket for writing my programs and have chosen language mode as: Beginning Student.

Why do I get cons and A with "" and empty in my newlist?开发者_JAVA技巧


Please don't use "Beginning Student" as a language type in Racket. That's a subset specially made for the HtDP book. The languages "racket", "r5rs", "pretty big", are more like real Schemes and should all work for The Little Schemer.

In your arguments list, you have (codeValue newList), but in the program body you refer to newlist. All of the Schemes that I've used are case-sensitive. Changing your newList to newlist made your program run perfectly fine on Chez Scheme and Guile too.

Edit: To clarify, "A" is a string. Scheme also has the additional data type of symbol, which is just a name and nothing else (and is probably what you want here). You probably want to (cons 'A newlist) rather than (cons "A" newlist) if you're expecting (A).


Other Schemes would print just ("A"). Such output is clearly an idiosyncrasy of the Racket language.

As for why the A is in quotation marks, that's because it's a string object, and that's simply how string objects are printed. But if you were to DISPLAY such an object, you'd get the A by its lonesome.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜