# [racket] Looking for guidelines regarding paths...

 From: Danny Yoo (dyoo at hashcollision.org) Date: Mon May 14 11:56:47 EDT 2012 Previous message: [racket] Looking for guidelines regarding paths... Next message: [racket] Is this a bug in procedure 'primitive?' ? Messages sorted by: [date] [thread] [subject] [author]

> I suspect that "path" abstraction was created a means for manipulating file
> pathnames in a way that is cross-platform and also less prone to error than
> using strings.

That's the impression I get from this section in the reference:

http://docs.racket-lang.org/reference/pathutils.html

That being said, I think the Guide should have something to say on
this matter.  I remember being a bit confused too as to why there's a
separate datatype for paths.

When I was learning Racket, I did not realize immediately that there's
a distinction between doing something like this:

(build-path "foo/bar.rkt")

and

(build-path "foo" "bar.rkt")

There some be some advisory that recommends the second in favor of the
first: it's not immediately obvious why the second is better.  The
main reason is that the second is more platform agnostic: Windows does
not use "/" as a path separator, and the path-manipulating functions
use the conventions of the native platform.  So, for example, on my
Windows system, these two paths are not equal?

;;;;;;;;;;;;;;
> (equal? (build-path "foo/bar.rkt") (build-path "foo" "bar.rkt"))
#f
;;;;;;;;;;;;;;

The version that uses build-path in a platform-agnostic way uses the
Windows platform convensions, so it uses the backslash to separate
path elements:

;;;;;;;;;;;;;;
;; On a Windows environment:
> (path->string (build-path "foo" "baz" "bar.rkt"))
"foo\\baz\\bar.rkt"
;;;;;;;;;;;;;;

And if we were to run this on a Unix environment, we'd see forward
slashes instead.  So the separate path datatype is meant to insulate
against platform conventions.


 Posted on the users mailing list. Previous message: [racket] Looking for guidelines regarding paths... Next message: [racket] Is this a bug in procedure 'primitive?' ? Messages sorted by: [date] [thread] [subject] [author]