Abfrage: ist ein Element in einer Menge enthalten?
-
- Forum-Newbie
- Beiträge: 9
- Registriert: Di 1. Mär 2016, 10:41
Abfrage: ist ein Element in einer Menge enthalten?
Hallo zusammen,
ich benötige grade einen Funktion, die mir sagt, ob ein Element in einer Menge enthalten ist. Ist also beispielsweise X={a,b,c} die zu durchsuchende Menge und d ein Element, für das ich entscheiden will, ob es in der Menge enthalten ist, so benötige ich eine Funktion f(d,X), die den Wert 1 annimmt, wenn d=a oder d=b oder d=c, und sonst 0.
Weiß hier jemand, wie eine solche Abfrage zu programmieren wäre?
Vielen Dank schon einmal!
Christian
ich benötige grade einen Funktion, die mir sagt, ob ein Element in einer Menge enthalten ist. Ist also beispielsweise X={a,b,c} die zu durchsuchende Menge und d ein Element, für das ich entscheiden will, ob es in der Menge enthalten ist, so benötige ich eine Funktion f(d,X), die den Wert 1 annimmt, wenn d=a oder d=b oder d=c, und sonst 0.
Weiß hier jemand, wie eine solche Abfrage zu programmieren wäre?
Vielen Dank schon einmal!
Christian
Wo ist das Minimalbeispiel zur Frage?
Wie hast du denn die Mengen definiert? Falls du sie noch gar nicht definiert hast: LaTeX3 hat auch Funktionen für Listen.
Wie hast du denn die Mengen definiert? Falls du sie noch gar nicht definiert hast: LaTeX3 hat auch Funktionen für Listen.
- cgnieder
- Forum-Meister
- Beiträge: 730
- Registriert: Fr 22. Okt 2010, 18:37
- Wohnort: Herrenberg
- Kontaktdaten:
Da gibt es so viele verschiedene Möglichkeiten, dass man nicht weiß, was man raten soll, wenn man Deine konkrete Anwendung nicht kennt. Ist die Liste tatsächlich eine csv-Liste? Kann die Liste alles enthalten? Ist die Liste konstant, oder soll sie per Input veränderbar sein? Soll die Abfrage expandierbar sein? Und, und, und, …
Grüße
\documentclass{article} \usepackage{expl3,xparse} \ExplSyntaxOn \NewDocumentCommand \funktion {mmmm} { \clist_if_in:nnTF {#1} {#2} {#3} {#4} } \ExplSyntaxOff \begin{document} \funktion{a,b,c}{d}{1}{0} = 0 \funktion{a,b,c}{a}{1}{0} = 1 \end{document}
Clemens
Paketauthor
Paketauthor
-
- Forum-Newbie
- Beiträge: 9
- Registriert: Di 1. Mär 2016, 10:41
Hallo Clemens,
danke für die Antwort! Also, die Mengen/Listen werden vorher im Latex-Code per (re)newcommand festgelegt und trennen die Elemente tatsächlich immer per Komma. (Jede Liste steht dann für eine Menge von Elementen, die eine bestimmte Eigenschaft haben, und die Abfrage soll dann klären, ob das eine spezifische Element eine bestimmte Eigenschaft hat.) Entsprechend sind die Listen auch unterschiedlich lang.
danke für die Antwort! Also, die Mengen/Listen werden vorher im Latex-Code per (re)newcommand festgelegt und trennen die Elemente tatsächlich immer per Komma. (Jede Liste steht dann für eine Menge von Elementen, die eine bestimmte Eigenschaft haben, und die Abfrage soll dann klären, ob das eine spezifische Element eine bestimmte Eigenschaft hat.) Entsprechend sind die Listen auch unterschiedlich lang.
- cgnieder
- Forum-Meister
- Beiträge: 730
- Registriert: Fr 22. Okt 2010, 18:37
- Wohnort: Herrenberg
- Kontaktdaten:
Was ich eigentlich meinte, war: [mm][/mm] Dann kann man Dir was passendes vorschlagen…
Grüße
Grüße
Clemens
Paketauthor
Paketauthor
-
- Forum-Newbie
- Beiträge: 9
- Registriert: Di 1. Mär 2016, 10:41
Okay, ich habe jetzt mal zusammengestellt, was ich bisher habe. Du siehst dann in dem Dokument, was schief läuft:
\documentclass[a4paper,12pt]{article} \usepackage{ifthen,pgffor} \newcommand{\ifiselementof}[4]{\foreach \element in #2 {\ifthenelse{\equal{\element}{#1}}{#3}{#4}}} \newcommand{\setX}{a,b,c,d} \newcommand{\setY}{a} \begin{document} Positivbsp: Menge Y = \setY\\ \foreach \elementX in \setX {\ifiselementof{\elementX}{\setY}{Element \elementX\ ist auch in Menge Y.\\}{Element \elementX\ ist nicht in Menge Y.\\}} \renewcommand{\setY}{a,b,c} Negativbsp: Menge Y = \setY\\ \foreach \elementX in \setX {\ifiselementof{\elementX}{\setY}{Element \elementX\ ist auch in Menge Y.\\}{Element \elementX\ ist nicht in Menge Y.\\}} \end{document}
- cgnieder
- Forum-Meister
- Beiträge: 730
- Registriert: Fr 22. Okt 2010, 18:37
- Wohnort: Herrenberg
- Kontaktdaten:
Dann vielleicht so:
Grüße
\documentclass[a4paper,12pt]{article} \usepackage{pgffor,etoolbox} \newbool{iselement} % #1: control sequence containing element to check % #2: control sequence containing csv list of elements % #3: true % #4: false \newcommand\checkelement[4]{% \global\boolfalse{iselement}% \foreach \Y in #2 {% \ifx#1\Y \global\booltrue{iselement}% \fi }% \ifbool{iselement}{#3}{#4}% } % #1 (optional): control sequence containing element of first set % #2: control sequence containing first csv list of elements % #3: control sequence containing second csv list of elements % #4: true % #5: false \newcommand\checksets[5][\X]{% \foreach #1 in #2 {% \checkelement#1{#3}{#4}{#5}% }% } \begin{document} \newcommand{\setX}{a,b,c,d} \newcommand{\setY}{a} Positivbsp: Menge Y = \setY \checksets{\setX}{\setY} {Element \X\ ist auch in Menge Y.\par} {Element \X\ ist nicht in Menge Y.\par} \bigskip \renewcommand{\setY}{a,b,c} Negativbsp: Menge Y = \setY \checksets[\elementX]{\setX}{\setY} {Element \elementX\ ist auch in Menge Y.\par} {Element \elementX\ ist nicht in Menge Y.\par} \end{document}
Clemens
Paketauthor
Paketauthor