all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* concat vs format
@ 2018-12-09  3:50 Jean-Christophe Helary
  2018-12-09  4:09 ` Drew Adams
  0 siblings, 1 reply; 9+ messages in thread
From: Jean-Christophe Helary @ 2018-12-09  3:50 UTC (permalink / raw)
  To: help-gnu-emacs

Is there a difference between:

(concat firstPartofURL secondPartofURL)

and

(format "%s%s" firstPartofURL secondPartofURL)

?

Jean-Christophe Helary
-----------------------------------------------
http://mac4translators.blogspot.com @brandelune





^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: concat vs format
  2018-12-09  3:50 concat vs format Jean-Christophe Helary
@ 2018-12-09  4:09 ` Drew Adams
  2018-12-09 10:02   ` Jean-Christophe Helary
  0 siblings, 1 reply; 9+ messages in thread
From: Drew Adams @ 2018-12-09  4:09 UTC (permalink / raw)
  To: Jean-Christophe Helary, help-gnu-emacs

> Is there a difference between:
> (concat firstPartofURL secondPartofURL) and
> (format "%s%s" firstPartofURL secondPartofURL)?

If both args are strings then no; the result
is the same.  But the functions are very
different - they take different args and,
aside from some cases like this one where
the result is the same for some args, their
uses/purposes are different.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09  4:09 ` Drew Adams
@ 2018-12-09 10:02   ` Jean-Christophe Helary
  2018-12-09 11:30     ` Stefan Huchler
  0 siblings, 1 reply; 9+ messages in thread
From: Jean-Christophe Helary @ 2018-12-09 10:02 UTC (permalink / raw)
  To: help-gnu-emacs



> On Dec 9, 2018, at 13:09, Drew Adams <drew.adams@oracle.com> wrote:
> 
>> Is there a difference between:
>> (concat firstPartofURL secondPartofURL) and
>> (format "%s%s" firstPartofURL secondPartofURL)?
> 
> If both args are strings then no; the result
> is the same.  But the functions are very
> different - they take different args and,
> aside from some cases like this one where
> the result is the same for some args, their
> uses/purposes are different.

Thank you.

I'm trying to create URLs from dates and at one point I get a concat that outputs "/path/to/url/..." instead of "/path/to/url/12/04/index.html".
I checked the code and put format instead of concat and got the same result. All the things I try to concat are strings that I progressively build over other strings, and edebug gives me correct values up to the point where the wrong string is created...

I'm going to re-check the whole thing...

Jean-Christophe Helary
-----------------------------------------------
http://mac4translators.blogspot.com @brandelune




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09 10:02   ` Jean-Christophe Helary
@ 2018-12-09 11:30     ` Stefan Huchler
  2018-12-09 13:42       ` Jean-Christophe Helary
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Huchler @ 2018-12-09 11:30 UTC (permalink / raw)
  To: help-gnu-emacs

I run into a similar problem when I used the prin1 function. It had to
do with the default value auf print-length which was to low.

can you put a (let* ((print-length 5000)) around your code and test
that? Or look up the variable if it could have something todo with your
problem.

Jean-Christophe Helary <brandelune@gmail.com> writes:

>> On Dec 9, 2018, at 13:09, Drew Adams <drew.adams@oracle.com> wrote:
>> 
>>> Is there a difference between:
>>> (concat firstPartofURL secondPartofURL) and
>>> (format "%s%s" firstPartofURL secondPartofURL)?
>> 
>> If both args are strings then no; the result
>> is the same.  But the functions are very
>> different - they take different args and,
>> aside from some cases like this one where
>> the result is the same for some args, their
>> uses/purposes are different.
>
> Thank you.
>
> I'm trying to create URLs from dates and at one point I get a concat that outputs "/path/to/url/..." instead of "/path/to/url/12/04/index.html".
> I checked the code and put format instead of concat and got the same
> result. All the things I try to concat are strings that I
> progressively build over other strings, and edebug gives me correct
> values up to the point where the wrong string is created...
>
> I'm going to re-check the whole thing...
>
> Jean-Christophe Helary
> -----------------------------------------------
> http://mac4translators.blogspot.com @brandelune




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09 11:30     ` Stefan Huchler
@ 2018-12-09 13:42       ` Jean-Christophe Helary
  2018-12-09 14:15         ` Stefan Monnier
  2018-12-09 14:57         ` Stephen Berman
  0 siblings, 2 replies; 9+ messages in thread
From: Jean-Christophe Helary @ 2018-12-09 13:42 UTC (permalink / raw)
  To: help-gnu-emacs

Stephan,

I tried your suggestion but it did not (seem to) work.

But after simplifying the code, I found a simpler way to identify the issue, so that I can show it to the list.

I run edebug on this:

(defun dailyTemplate (myDay)
  (interactive (list
                (read-number "Date: " (string-to-number (format-time-string "%d")))))
  (let* ((myToday (getMyDates myDay))
	; (myTomorrow (+ (getMyDates myDay) 84600))
	; (myYesterday (- (getMyDates myDay) 84600))

	 (siteRoot "/Users/suzume/Documents/Code/brandelune.github.io/")

	 (cssRoot (concat siteRoot "css/" (format-time-string "%Y" myToday) "/"))

And here are the edebug messages:

Edebug: dailyTemplate
 [4 times]
Result: "09"

Result: 9 (#o11, #x9, ?\C-i)

Result: 9 (#o11, #x9, ?\C-i)

Result: (9)
 [3 times]
Result: 9 (#o11, #x9, ?\C-i)

Result: 1544324400 (#o13403102460, #x5c0c8530)
 [2 times]
Result: "/Users/suzume/Documents/Code/brandelune.github.io/"
 [2 times]
Result: 1544324400 (#o13403102460, #x5c0c8530)

Result: "2018"

Result: "/Users/suzume/Documents/Code/brandelune.github.io/..."

So, the last concat gives me a path that's not the result of a "concat" on the values that I feed it. Why ?

"myDay" is checked to be between 1 and 31 and "getMyDates" returns this:

(encode-time (list 0 0 12 myDay myMonth myYear nil nil 32400) 'integer)

When I run:

(concat "/Users/suzume/Documents/Code/brandelune.github.io/" "css/" (format-time-string "%Y" 1544324400) "/")

I *do* get what I expect, which is:

"/Users/suzume/Documents/Code/brandelune.github.io/css/2018/"

There is clearly something I do not understand here... :(

Jean-Christophe 

> On Dec 9, 2018, at 20:30, Stefan Huchler <stefan.huchler@mail.de> wrote:
> 
> I run into a similar problem when I used the prin1 function. It had to
> do with the default value auf print-length which was to low.
> 
> can you put a (let* ((print-length 5000)) around your code and test
> that? Or look up the variable if it could have something todo with your
> problem.
> 
> Jean-Christophe Helary <brandelune@gmail.com> writes:
> 
>>> On Dec 9, 2018, at 13:09, Drew Adams <drew.adams@oracle.com> wrote:
>>> 
>>>> Is there a difference between:
>>>> (concat firstPartofURL secondPartofURL) and
>>>> (format "%s%s" firstPartofURL secondPartofURL)?
>>> 
>>> If both args are strings then no; the result
>>> is the same.  But the functions are very
>>> different - they take different args and,
>>> aside from some cases like this one where
>>> the result is the same for some args, their
>>> uses/purposes are different.
>> 
>> Thank you.
>> 
>> I'm trying to create URLs from dates and at one point I get a concat that outputs "/path/to/url/..." instead of "/path/to/url/12/04/index.html".
>> I checked the code and put format instead of concat and got the same
>> result. All the things I try to concat are strings that I
>> progressively build over other strings, and edebug gives me correct
>> values up to the point where the wrong string is created...
>> 
>> I'm going to re-check the whole thing...
>> 
>> Jean-Christophe Helary
>> -----------------------------------------------
>> http://mac4translators.blogspot.com @brandelune
> 
> 

Jean-Christophe Helary
-----------------------------------------------
http://mac4translators.blogspot.com @brandelune





^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09 13:42       ` Jean-Christophe Helary
@ 2018-12-09 14:15         ` Stefan Monnier
  2018-12-09 14:55           ` Jean-Christophe Helary
  2018-12-09 14:57         ` Stephen Berman
  1 sibling, 1 reply; 9+ messages in thread
From: Stefan Monnier @ 2018-12-09 14:15 UTC (permalink / raw)
  To: help-gnu-emacs

> 	 (cssRoot (concat siteRoot "css/" (format-time-string "%Y" myToday) "/"))

BTW, it's recommended to use `expand-file-name` instead of `concat` to
combine a directory name and a relative file name.

E.g.

     (cssRoot (file-name-as-directory
               (expand-file-name (format-time-string "%Y" myToday)
                (expand-file-name "css" siteRoot))))


-- Stefan




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09 14:15         ` Stefan Monnier
@ 2018-12-09 14:55           ` Jean-Christophe Helary
  0 siblings, 0 replies; 9+ messages in thread
From: Jean-Christophe Helary @ 2018-12-09 14:55 UTC (permalink / raw)
  To: help-gnu-emacs



> On Dec 9, 2018, at 23:15, Stefan Monnier <monnier@iro.umontreal.ca> wrote:
> 
>> 	 (cssRoot (concat siteRoot "css/" (format-time-string "%Y" myToday) "/"))
> 
> BTW, it's recommended to use `expand-file-name` instead of `concat` to
> combine a directory name and a relative file name.

I'll try this, but would that explain why my concat doesn't work ?

> E.g.
> 
>     (cssRoot (file-name-as-directory
>               (expand-file-name (format-time-string "%Y" myToday)
>                (expand-file-name "css" siteRoot))))

Jean-Christophe Helary
-----------------------------------------------
http://mac4translators.blogspot.com @brandelune




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09 13:42       ` Jean-Christophe Helary
  2018-12-09 14:15         ` Stefan Monnier
@ 2018-12-09 14:57         ` Stephen Berman
  2018-12-09 15:44           ` Jean-Christophe Helary
  1 sibling, 1 reply; 9+ messages in thread
From: Stephen Berman @ 2018-12-09 14:57 UTC (permalink / raw)
  To: Jean-Christophe Helary; +Cc: help-gnu-emacs

On Sun, 9 Dec 2018 22:42:15 +0900 Jean-Christophe Helary <brandelune@gmail.com> wrote:

> I run edebug on this:
>
> (defun dailyTemplate (myDay)
>   (interactive (list
>                 (read-number "Date: " (string-to-number (format-time-string "%d")))))
>   (let* ((myToday (getMyDates myDay))
> 	; (myTomorrow (+ (getMyDates myDay) 84600))
> 	; (myYesterday (- (getMyDates myDay) 84600))
>
> 	 (siteRoot "/Users/suzume/Documents/Code/brandelune.github.io/")
>
> 	 (cssRoot (concat siteRoot "css/" (format-time-string "%Y" myToday) "/"))
>
> And here are the edebug messages:
>
> Edebug: dailyTemplate
>  [4 times]
> Result: "09"
>
> Result: 9 (#o11, #x9, ?\C-i)
>
> Result: 9 (#o11, #x9, ?\C-i)
>
> Result: (9)
>  [3 times]
> Result: 9 (#o11, #x9, ?\C-i)
>
> Result: 1544324400 (#o13403102460, #x5c0c8530)
>  [2 times]
> Result: "/Users/suzume/Documents/Code/brandelune.github.io/"
>  [2 times]
> Result: 1544324400 (#o13403102460, #x5c0c8530)
>
> Result: "2018"
>
> Result: "/Users/suzume/Documents/Code/brandelune.github.io/..."
>
> So, the last concat gives me a path that's not the result of a
> "concat" on the values that I feed it. Why ?

The length of the output in Edebug is constrained by the user option
edebug-print-length, which is 50 by default; by setting that variable to
nil, the output won't be cut off.

Steve Berman



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: concat vs format
  2018-12-09 14:57         ` Stephen Berman
@ 2018-12-09 15:44           ` Jean-Christophe Helary
  0 siblings, 0 replies; 9+ messages in thread
From: Jean-Christophe Helary @ 2018-12-09 15:44 UTC (permalink / raw)
  To: help-gnu-emacs



> On Dec 9, 2018, at 23:57, Stephen Berman <stephen.berman@gmx.net> wrote:
> 
>> Result: "/Users/suzume/Documents/Code/brandelune.github.io/ <http://brandelune.github.io/>..."
>> 
>> So, the last concat gives me a path that's not the result of a
>> "concat" on the values that I feed it. Why ?
> 
> The length of the output in Edebug is constrained by the user option
> edebug-print-length, which is 50 by default; by setting that variable to
> nil, the output won't be cut off.

Thank you Stephan.

I found out that my issue had nothing to do with concat/format but rather with let*/setq.

My first code ran fine with setq, then, after the thread that I started about setq a few days ago, I decided to use let* and let in my code instead. And that's when things started to break. I don't understand why (must be something with variable scope) but for now I need to write something that works and move on.

I'll come back here when I am closer to identifying my issue.


Jean-Christophe Helary
-----------------------------------------------
http://mac4translators.blogspot.com @brandelune




^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-12-09 15:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-09  3:50 concat vs format Jean-Christophe Helary
2018-12-09  4:09 ` Drew Adams
2018-12-09 10:02   ` Jean-Christophe Helary
2018-12-09 11:30     ` Stefan Huchler
2018-12-09 13:42       ` Jean-Christophe Helary
2018-12-09 14:15         ` Stefan Monnier
2018-12-09 14:55           ` Jean-Christophe Helary
2018-12-09 14:57         ` Stephen Berman
2018-12-09 15:44           ` Jean-Christophe Helary

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.