From: ···············@gmail.com
Subject: changing file type
Date: 
Message-ID: <5e33a983-1a7b-4bb6-b8e4-5ab32498e46c@w8g2000prd.googlegroups.com>
Hello,

I was wondering whats the recommended way of changing a file
type in lisp. Here is what I tried:

    [1]> (setf x (pathname "/home/noob/tmp.txt"))
    #P"/home/noob/tmp.txt"
    [2]> x
    #P"/home/noob/tmp.txt"
    [3]> (setf (pathname-type x) "doc")

    *** - FUNCTION: undefined function (SETF PATHNAME-TYPE)
    The following restarts are available:
    USE-VALUE      :R1
    You may input a value to be used instead of (FDEFINITION
     '(SETF PATHNAME-TYPE)).
    RETRY          :R2      Retry
    STORE-VALUE    :R3      You may input a new value for (FDEFINITION
'(SETF PATHNAME-TYPE)).
    ABORT          :R4      ABORT

I tried the above in sbcl as well as clisp. I get the same
error. Is 'pathname-type' not setf-able?

This seems to work but I am quite new to lisp and was wondering if
this is the correct way to do it.

    Break 1 [4]> (setf x (make-pathname :defaults x :type "doc"))
    #P"/home/noob/tmp.doc"
    Break 1 [4]> x
    #P"/home/noob/tmp.doc"
    Break 1 [4]>

Thanks very much.
Parth

From: Pascal J. Bourguignon
Subject: Re: changing file type
Date: 
Message-ID: <87od60aqka.fsf@hubble.informatimago.com>
···············@gmail.com writes:

> Hello,
>
> I was wondering whats the recommended way of changing a file
> type in lisp. 

(rename-file path (make-pathname :type new-type))

Note however that you cannot _remove_ the type of a file with CL.  You
could end up with a physical file name such as: "toto." but not "toto". 


> Here is what I tried:
>
>     [1]> (setf x (pathname "/home/noob/tmp.txt"))
>     #P"/home/noob/tmp.txt"
>     [2]> x
>     #P"/home/noob/tmp.txt"
>     [3]> (setf (pathname-type x) "doc")
>
>     *** - FUNCTION: undefined function (SETF PATHNAME-TYPE)
>     The following restarts are available:
>     USE-VALUE      :R1
>     You may input a value to be used instead of (FDEFINITION
>      '(SETF PATHNAME-TYPE)).
>     RETRY          :R2      Retry
>     STORE-VALUE    :R3      You may input a new value for (FDEFINITION
> '(SETF PATHNAME-TYPE)).
>     ABORT          :R4      ABORT
>
> I tried the above in sbcl as well as clisp. I get the same
> error. Is 'pathname-type' not setf-able?

CLHS says:
Function PATHNAME-HOST, PATHNAME-DEVICE, PATHNAME-DIRECTORY, PATHNAME-NAME, PATHNAME-TYPE, PATHNAME-VERSION
^^^^^^^^
not Accessor, so no, pathname-type may not be setf-able.


> This seems to work but I am quite new to lisp and was wondering if
> this is the correct way to do it.
>
>     Break 1 [4]> (setf x (make-pathname :defaults x :type "doc"))
>     #P"/home/noob/tmp.doc"
>     Break 1 [4]> x
>     #P"/home/noob/tmp.doc"
>     Break 1 [4]>

Yes, that's the best way to do it. 

-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
The rule for today:
Touch my tail, I shred your hand.
New rule tomorrow.
From: ···············@gmail.com
Subject: Re: changing file type
Date: 
Message-ID: <e3f26ddb-b389-4463-a528-230ad3db706c@z16g2000prn.googlegroups.com>
On Jun 17, 11:01 pm, ····@informatimago.com (Pascal J. Bourguignon)
wrote:
> ···············@gmail.com writes:
> > Hello,
>
> > I was wondering whats the recommended way of changing a file
> > type in lisp.
>
> (rename-file path (make-pathname :type new-type))
>
> Note however that you cannot _remove_ the type of a file with CL.  You
> could end up with a physical file name such as: "toto." but not "toto".
>
>
>
> > Here is what I tried:
>
> >     [1]> (setf x (pathname "/home/noob/tmp.txt"))
> >     #P"/home/noob/tmp.txt"
> >     [2]> x
> >     #P"/home/noob/tmp.txt"
> >     [3]> (setf (pathname-type x) "doc")
>
> >     *** - FUNCTION: undefined function (SETF PATHNAME-TYPE)
> >     The following restarts are available:
> >     USE-VALUE      :R1
> >     You may input a value to be used instead of (FDEFINITION
> >      '(SETF PATHNAME-TYPE)).
> >     RETRY          :R2      Retry
> >     STORE-VALUE    :R3      You may input a new value for (FDEFINITION
> > '(SETF PATHNAME-TYPE)).
> >     ABORT          :R4      ABORT
>
> > I tried the above in sbcl as well as clisp. I get the same
> > error. Is 'pathname-type' not setf-able?
>
> CLHS says:
> Function PATHNAME-HOST, PATHNAME-DEVICE, PATHNAME-DIRECTORY, PATHNAME-NAME, PATHNAME-TYPE, PATHNAME-VERSION
> ^^^^^^^^
> not Accessor, so no, pathname-type may not be setf-able.
>

Thanks Pascal. Wasn't aware of this detail .. this should
certainly make life easier :)

> > This seems to work but I am quite new to lisp and was wondering if
> > this is the correct way to do it.
>
> >     Break 1 [4]> (setf x (make-pathname :defaults x :type "doc"))
> >     #P"/home/noob/tmp.doc"
> >     Break 1 [4]> x
> >     #P"/home/noob/tmp.doc"
> >     Break 1 [4]>
>
> Yes, that's the best way to do it.
>
> --
> __Pascal Bourguignon__                    http://www.informatimago.com/
> The rule for today:
> Touch my tail, I shred your hand.
> New rule tomorrow.