I have the following MWE:
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\begin{document}
\NewDocumentCommand\my:mapper:fna{mm}{
\typeout{#1}
\typeout{#2}
\NewDocumentCommand\my:mapper:fnb{mm}{
\typeout{#1}
\typeout{#2}
}
\prop_map_function:NN \my:pl:b \my:mapper:fnb
}
\prop_new:N {\my:pl:a}
\prop_put:Nnn \my:pl:a {fooa} {baza}
\prop_put:Nnn \my:pl:a {foob} {bazb}
\prop_put:Nnn \my:pl:a {fooc} {bazc}
\prop_new:N {\my:pl:b}
\prop_put:Nnn \my:pl:b {xooa} {yaza}
\prop_put:Nnn \my:pl:b {xoob} {yazb}
\prop_put:Nnn \my:pl:b {xooc} {yazc}
\prop_map_function:NN \my:pl:a \my:mapper:fna
\end{document}
It errors at this point however:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "xparse/command-already-defined"
!
! Command '\my:mapper:fnb' already defined!
!
! See the LaTeX3 documentation for further information.
!
! For immediate help type H <return>.
!...............................................
l.35 \prop_map_function:NN \my:pl:a \my:mapper:fna
I am not sure what is wrong because the definition is created only one time just before the \prop_map_function call. Wondering how to fix this so I can do nested function calls where the nested function call can potentially use #1 and such from parent scopes.
Note, it does work if the command is moved outside of the nesting:
\documentclass[a4paper]{article}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\begin{document}
\NewDocumentCommand\my:mapper:fnb{mm}{
\typeout{#1}
\typeout{#2}
}
\NewDocumentCommand\my:mapper:fna{mm}{
\typeout{#1}
\typeout{#2}
\prop_map_function:NN \my:pl:b \my:mapper:fnb
}
\prop_new:N {\my:pl:a}
\prop_put:Nnn \my:pl:a {fooa} {baza}
\prop_put:Nnn \my:pl:a {foob} {bazb}
\prop_put:Nnn \my:pl:a {fooc} {bazc}
\prop_new:N {\my:pl:b}
\prop_put:Nnn \my:pl:b {xooa} {yaza}
\prop_put:Nnn \my:pl:b {xoob} {yazb}
\prop_put:Nnn \my:pl:b {xooc} {yazc}
\prop_map_function:NN \my:pl:a \my:mapper:fna
\end{document}
But I would like to do it the original way if possible.