mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-30 09:00:31 -08:00
Make 'mapconcat' argument 'separator' optional
* src/fns.c (Fmapconcat): Make third 'separator' argument optional. (Bug#50965) * doc/lispref/functions.texi (Mapping Functions): Update documentation for above change. * test/src/fns-tests.el (fns-tests-mapconcat): New test. * doc/misc/cl.texi (Obsolete Setf Customization): Don't use third mapconcat argument in example. * lisp/emacs-lisp/subr-x.el (string-join): Doc fix.
This commit is contained in:
parent
4bf532ee82
commit
d652efcd08
6 changed files with 35 additions and 9 deletions
|
|
@ -961,14 +961,14 @@ side-effects only---the values it returns are ignored, not collected
|
||||||
into a list. @code{mapc} always returns @var{sequence}.
|
into a list. @code{mapc} always returns @var{sequence}.
|
||||||
@end defun
|
@end defun
|
||||||
|
|
||||||
@defun mapconcat function sequence separator
|
@defun mapconcat function sequence &optional separator
|
||||||
@code{mapconcat} applies @var{function} to each element of
|
@code{mapconcat} applies @var{function} to each element of
|
||||||
@var{sequence}; the results, which must be sequences of characters
|
@var{sequence}; the results, which must be sequences of characters
|
||||||
(strings, vectors, or lists), are concatenated into a single string
|
(strings, vectors, or lists), are concatenated into a single string
|
||||||
return value. Between each pair of result sequences, @code{mapconcat}
|
return value. Between each pair of result sequences, @code{mapconcat}
|
||||||
inserts the characters from @var{separator}, which also must be a
|
inserts the characters from @var{separator}, which also must be a
|
||||||
string, or a vector or list of characters. @xref{Sequences Arrays
|
string, or a vector or list of characters; a @code{nil} value is
|
||||||
Vectors}.
|
treated as the empty string. @xref{Sequences Arrays Vectors}.
|
||||||
|
|
||||||
The argument @var{function} must be a function that can take one
|
The argument @var{function} must be a function that can take one
|
||||||
argument and returns a sequence of characters: a string, a vector, or
|
argument and returns a sequence of characters: a string, a vector, or
|
||||||
|
|
@ -986,8 +986,7 @@ string.
|
||||||
|
|
||||||
@group
|
@group
|
||||||
(mapconcat (lambda (x) (format "%c" (1+ x)))
|
(mapconcat (lambda (x) (format "%c" (1+ x)))
|
||||||
"HAL-8000"
|
"HAL-8000")
|
||||||
"")
|
|
||||||
@result{} "IBM.9111"
|
@result{} "IBM.9111"
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
|
||||||
|
|
@ -5030,7 +5030,7 @@ The above @code{incf} example could be written using
|
||||||
@ignore
|
@ignore
|
||||||
(defmacro concatf (place &rest args)
|
(defmacro concatf (place &rest args)
|
||||||
(gv-letplace (getter setter) place
|
(gv-letplace (getter setter) place
|
||||||
(macroexp-let2 nil v (mapconcat 'identity args "")
|
(macroexp-let2 nil v (mapconcat 'identity args)
|
||||||
(funcall setter `(concat ,getter ,v)))))
|
(funcall setter `(concat ,getter ,v)))))
|
||||||
@end ignore
|
@end ignore
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
|
||||||
4
etc/NEWS
4
etc/NEWS
|
|
@ -118,6 +118,10 @@ with recent versions of Firefox.
|
||||||
|
|
||||||
* Lisp Changes in Emacs 29.1
|
* Lisp Changes in Emacs 29.1
|
||||||
|
|
||||||
|
+++
|
||||||
|
** Third 'mapconcat' argument 'separator' is now optional.
|
||||||
|
An explicit nil always meant the empty string, now it can be left out.
|
||||||
|
|
||||||
---
|
---
|
||||||
** Themes can now be made obsolete.
|
** Themes can now be made obsolete.
|
||||||
Using 'make-obsolete' on a theme is now supported. This will make
|
Using 'make-obsolete' on a theme is now supported. This will make
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,9 @@ The variable list SPEC is the same as in `if-let'."
|
||||||
(string= string ""))
|
(string= string ""))
|
||||||
|
|
||||||
(defsubst string-join (strings &optional separator)
|
(defsubst string-join (strings &optional separator)
|
||||||
"Join all STRINGS using SEPARATOR."
|
"Join all STRINGS using SEPARATOR.
|
||||||
|
Optional argument SEPARATOR must be a string, a vector, or a list of
|
||||||
|
characters; nil stands for the empty string."
|
||||||
(mapconcat #'identity strings separator))
|
(mapconcat #'identity strings separator))
|
||||||
|
|
||||||
(define-obsolete-function-alias 'string-reverse 'reverse "25.1")
|
(define-obsolete-function-alias 'string-reverse 'reverse "25.1")
|
||||||
|
|
|
||||||
|
|
@ -2852,12 +2852,16 @@ mapcar1 (EMACS_INT leni, Lisp_Object *vals, Lisp_Object fn, Lisp_Object seq)
|
||||||
return leni;
|
return leni;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFUN ("mapconcat", Fmapconcat, Smapconcat, 3, 3, 0,
|
DEFUN ("mapconcat", Fmapconcat, Smapconcat, 2, 3, 0,
|
||||||
doc: /* Apply FUNCTION to each element of SEQUENCE, and concat the results as strings.
|
doc: /* Apply FUNCTION to each element of SEQUENCE, and concat the results as strings.
|
||||||
In between each pair of results, stick in SEPARATOR. Thus, " " as
|
In between each pair of results, stick in SEPARATOR. Thus, " " as
|
||||||
SEPARATOR results in spaces between the values returned by FUNCTION.
|
SEPARATOR results in spaces between the values returned by FUNCTION.
|
||||||
|
|
||||||
SEQUENCE may be a list, a vector, a bool-vector, or a string.
|
SEQUENCE may be a list, a vector, a bool-vector, or a string.
|
||||||
SEPARATOR must be a string, a vector, or a list of characters.
|
|
||||||
|
Optional argument SEPARATOR must be a string, a vector, or a list of
|
||||||
|
characters; nil stands for the empty string.
|
||||||
|
|
||||||
FUNCTION must be a function of one argument, and must return a value
|
FUNCTION must be a function of one argument, and must return a value
|
||||||
that is a sequence of characters: either a string, or a vector or
|
that is a sequence of characters: either a string, or a vector or
|
||||||
list of numbers that are valid character codepoints. */)
|
list of numbers that are valid character codepoints. */)
|
||||||
|
|
|
||||||
|
|
@ -430,6 +430,23 @@
|
||||||
(buffer-hash))
|
(buffer-hash))
|
||||||
(sha1 "foo"))))
|
(sha1 "foo"))))
|
||||||
|
|
||||||
|
(ert-deftest fns-tests-mapconcat ()
|
||||||
|
(should (string= (mapconcat #'identity '()) ""))
|
||||||
|
(should (string= (mapconcat #'identity '("a" "b")) "ab"))
|
||||||
|
(should (string= (mapconcat #'identity '() "_") ""))
|
||||||
|
(should (string= (mapconcat #'identity '("A") "_") "A"))
|
||||||
|
(should (string= (mapconcat #'identity '("A" "B") "_") "A_B"))
|
||||||
|
(should (string= (mapconcat #'identity '("A" "B" "C") "_") "A_B_C"))
|
||||||
|
;; non-ASCII strings
|
||||||
|
(should (string= (mapconcat #'identity '("Ä" "ø" "☭" "தமிழ்") "_漢字_")
|
||||||
|
"Ä_漢字_ø_漢字_☭_漢字_தமிழ்"))
|
||||||
|
;; vector
|
||||||
|
(should (string= (mapconcat #'identity ["a" "b"] "") "ab"))
|
||||||
|
;; bool-vector
|
||||||
|
(should (string= (mapconcat #'identity [nil nil] "") ""))
|
||||||
|
(should-error (mapconcat #'identity [nil nil t])
|
||||||
|
:type 'wrong-type-argument))
|
||||||
|
|
||||||
(ert-deftest fns-tests-mapcan ()
|
(ert-deftest fns-tests-mapcan ()
|
||||||
(should-error (mapcan))
|
(should-error (mapcan))
|
||||||
(should-error (mapcan #'identity))
|
(should-error (mapcan #'identity))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue