[racket] Question about path/param-path function
On Sun, Feb 16, 2014 at 08:19:48PM -0600, David Novogrodsky wrote:
> All,
>
> First here is the code I entered in the interaction window. The question I have are about these lines:
> > (require xml net/url)
> > (define u (string->url "http://localhost:8080/foo/testing"))
> > (url-path u)
> '(#<path/param> #<path/param>)
> > (map path/param-path (url-path u))
> '("foo" "testing”)
>
> I took an online course on Systematic Programming and it used Racket for its examples. Well, actually it used the intermediate learning language for the class. now I am trying to learn Racket.
I had almost finished this response when I saw Professor Felleisen had
already responded. Some of this is therefore redundant, but perhaps it
is useful for some additional context.
> The questions:
> 1. Take a look at the fourth line. What is this called? Is this a list of references or pointers?
It's a list of path/param objects. I suspect you are thrown by the
funny-looking #<path/param> parts. That is how opaque struct instances
are printed. Structure printing is documented here:
http://doc.racket-lang.org/reference/printing.html#%28part._print-structure%29
but that has much more detail than you need right now, and very little
that applies to this example anyway.
> 2. I am trying to find if help-desk information about path/param-path
> function, but I have not been able to find any.
When I search for `path/param-path' online I get:
http://doc.racket-lang.org/search/index.html?q=path/param-path
which links to the docs for `path/param':
http://doc.racket-lang.org/net/url.html?q=path/param-path#%28def._%28%28lib._net%2Furl-structs..rkt%29._path%2Fparam-path%29%29
In case you aren't aware, a structure type `foo' with a field `bar' will
typically have an accessor function `foo-bar' which takes a foo instance
and returns the value of its bar field. In this case, `path/param-path'
is the accessor function for the `path' field of a `path/param' object.
> This function returns returns the resolved parts of the path of a URL.
> What is the proper term for taking the list in line four and returning
> the list in line five?
I'm not sure what you are looking for here -- a word that means "using
`map'"? I'm not a computer scientist, but maybe "mapping" or
"transforming"? Perhaps you are referring to the fact that path/param
objects are wrappers or decorators around simple strings, so your map
operation is "unwrapping" or "deconstructing"?
> 3. What is the proper term for what the function url-path returns?
A search for `url-path' brings me to:
http://doc.racket-lang.org/net/url.html?q=url-path#%28def._%28%28lib._net%2Furl-structs..rkt%29._url-path%29%29
which shows that the `path' field of a `url' object is a:
(listof path/param?)
In other words, `url-path' will return a list of `path/param' objects.
> 4. Does anyone have an example of using the results from line 4 as part of a check-expect test?
(check-expect (map path/param-path (url-path u))
(list "foo" "testing"))
I initially had trouble using check-expect directly with the result of
url-path, I think because of the problem described here:
http://www.mail-archive.com/users@racket-lang.org/msg09011.html
If you want to learn Racket, you might want to switch the language
(control-L in DrRacket) to Racket, and use rackunit for unit testing:
#lang racket
(require net/url)
(require rackunit)
(define u (string->url "http://localhost:8080/foo/testing"))
(check-equal? (map path/param-path (url-path u))
(list "foo" "testing"))
David