I'm new to Racket and I was hoping to get more insights in the these two operators: , & ,@.
There's very little documentation of these new operators, however, to my understanding the former (,) unquotes everything if its is followed by a list. And the latter (,@) splices the values.
For example if the following is typed in the Dr. Racket interpreter:
(define scores '(1 3 2))
(define pets '(dog cat))
and then the following query is made:
`(,scores ,@pets)
this would yield : '((1 3 2) dog cat)
It would be appreciated if I could get more details, definitions and more examples about these operators. Thanks in advance.
A single quote followed by the written representation of a value will produce that value:
Example: '(1 x "foo") will produce a value that prints as
(1 x "foo").Suppose now that I don't want a literal symbol
xin the list. I have a variablexin my program, and I want to insert the value to whichxis bound.To mark that I want the value of
xrather than the symbolx, I insert a comma beforex:It won't work as-is though - I now get a value that has a literal comma as well as a symbol
x. The problem is thatquotedoes not know about the comma convention.Backtick or
backquoteknows about the comma-convention, so that will give the correct result:Now let's say x is the list
(a b).This looks as expected. But what if I wanted
(1 a b "foo")as the result? We need a way so show "insert the elements of a list". That's where,@comes into the picture.