Abfrage: ist ein Element in einer Menge enthalten?

Formelsatz für Mathematik, Naturwissenschaften und Technik


ravintastentyp123
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Di 1. Mär 2016, 10:41

Abfrage: ist ein Element in einer Menge enthalten?

Beitrag von ravintastentyp123 »

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

Besserwisser

Beitrag von Besserwisser »

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.

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

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, …
\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}
Grüße
Clemens
Paketauthor

ravintastentyp123
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Di 1. Mär 2016, 10:41

Beitrag von ravintastentyp123 »

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.

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Was ich eigentlich meinte, war: [mm][/mm] Dann kann man Dir was passendes vorschlagen…

Grüße
Clemens
Paketauthor

ravintastentyp123
Forum-Newbie
Forum-Newbie
Beiträge: 9
Registriert: Di 1. Mär 2016, 10:41

Beitrag von ravintastentyp123 »

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}

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Dann vielleicht so:
\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}
Grüße
Clemens
Paketauthor

Antworten