Was bedeutet das und was ist auch die Kardinalität der nächsten Typen zum Beispiel:
unit->int
bool->(int->bool)
Was bedeutet das und was ist auch die Kardinalität der nächsten Typen zum Beispiel:
unit->int
bool->(int->bool)
Die Kardinalität eines Typs ist die Anzahl der möglichen gültigen Werte, die von diesem Typ sein können.
Bei Funktionstypen möchten wir normalerweise zwei Funktionen betrachten, die für jede Eingabe denselben Wert zurückgeben, um zumindest "die gleiche Funktion" zu sein (dies wird als "extensionale Gleichheit" bezeichnet).
Ich gehe davon aus, dass es sich um ein Hausaufgabenproblem handelt, und ich gehe weiter davon aus, dass Funktionen, die nicht terminieren oder undefinierte Werte zurückgeben, nicht enthalten sind (wie sie tatsächlich auch in einer typischen mathematischen Behandlung nicht enthalten wären).
Die Kardinalität von Typen, die eine endliche Anzahl möglicher Werte haben können, ist im Prinzip recht einfach auszudrücken, weil man einfach eine Zahl als Kardinalität angeben kann. Bei unendlichen Kardinalitäten gibt es jedoch technisch gesehen einen Unterschied zwischen verschiedenen Arten von Unendlichkeiten. Zum Beispiel ist eine überabzählbare Unendlichkeit "größer als" eine abzählbare Unendlichkeit. (Ehrlich gesagt bin ich mir nicht sicher, ob erwartet wird, dass du das weißt, oder ob du einfach eine Antwort wie "unendlich" geben sollst - prüfe deine Kursnotizen.) Aus diesem Grund ist es eine gute Idee anzugeben, über welche Unendlichkeit du sprichst, z. B. indem du auf die Kardinalität eines "einfacheren" Typs verweist.
Die Kardinalität von unit->int
ist dieselbe wie die Kardinalität von int
(und dasselbe gilt für jeden anderen Zieltyp, den du anstelle von int
wählen könntest), weil ein Wert vom Typ unit->X
notwendigerweise eine konstante Funktion sein muss, die ihre Eingabe "ignoriert" und einen konstanten Wert vom Typ X
Ich hoffe, diese unvollständige Antwort reicht aus, um dir den Einstieg zu erleichtern.
@Robin Green: Vielen Dank, aber was ist mit dem zweiten, kann ich vorschlagen, dass es 2 * 2 * #(int) ist?
@Robin Green: Das ist das Problem, dass es in meinen Notizen keine Erklärungen zum Unendlichen gibt, im Netz finde ich keine richtigen Informationen. Ich weiß auch, dass int 32 Bit hat, also kann es Werte von bis zu 2^32 bekommen? Was ist mit zweitem? Habe ich recht?
@rookie: Nein, das ist nicht die richtige Antwort. Berücksichtigen Sie int-> bool
, und tun wir so, als gäbe es nur 10 ganze Zahlen (haha). Die Anzahl der Funktionen von int nach bool wäre sicherlich mehr als 20: tatsächlich wären es 1024. Es geht also nicht nur darum, zwei Kardinalitäten zu multiplizieren, wenn Sie einen Funktionstyp haben.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.