mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
151 lines
3.7 KiB
Mathematica
151 lines
3.7 KiB
Mathematica
(* ::Package:: *)
|
|
|
|
BeginPackage["Predicates`"];
|
|
|
|
|
|
(* ::Title:: *)
|
|
(*Predicates*)
|
|
|
|
|
|
(* ::Section::Closed:: *)
|
|
(*Fuzzy Logic*)
|
|
|
|
|
|
(* ::Subsection:: *)
|
|
(*Documentation*)
|
|
|
|
|
|
PossiblyTrueQ::usage="Returns True if the argument is not definitely False.";
|
|
PossiblyFalseQ::usage="Returns True if the argument is not definitely True.";
|
|
PossiblyNonzeroQ::usage="Returns True if and only if its argument is not definitely zero.";
|
|
|
|
|
|
(* ::Subsection:: *)
|
|
(*Implimentation*)
|
|
|
|
|
|
Begin["`Private`"];
|
|
|
|
|
|
PossiblyTrueQ[expr_]:=\[Not]TrueQ[\[Not]expr]
|
|
|
|
|
|
PossiblyFalseQ[expr_]:=\[Not]TrueQ[expr]
|
|
|
|
|
|
End[];
|
|
|
|
|
|
(* ::Section::Closed:: *)
|
|
(*Numbers and Lists*)
|
|
|
|
|
|
(* ::Subsection:: *)
|
|
(*Documentation*)
|
|
|
|
|
|
AnyQ::usage="Given a predicate and a list, retuns True if and only if that predicate is True for at least one element of the list.";
|
|
AnyElementQ::usage="Returns True if cond matches any element of L.";
|
|
AllQ::usage="Given a predicate and a list, retuns True if and only if that predicate is True for all elements of the list.";
|
|
AllElementQ::usage="Returns True if cond matches any element of L.";
|
|
|
|
|
|
AnyNonzeroQ::usage="Returns True if L is a list such that at least one element is definitely not zero.";
|
|
AnyPossiblyNonzeroQ::usage="Returns True if expr is a list such that at least one element is not definitely zero.";
|
|
|
|
|
|
RealQ::usage="Returns True if and only if the argument is a real number";
|
|
PositiveQ::usage="Returns True if and only if the argument is a positive real number";
|
|
NonnegativeQ::usage="Returns True if and only if the argument is a non-negative real number";
|
|
PositiveIntegerQ::usage="Returns True if and only if the argument is a positive integer";
|
|
NonnegativeIntegerQ::usage="Returns True if and only if the argument is a non-negative integer";
|
|
|
|
|
|
IntegerListQ::usage="Returns True if and only if the input is a list of integers.";
|
|
PositiveIntegerListQ::usage="Returns True if and only if the input is a list of positive integers.";
|
|
NonnegativeIntegerListQ::usage="Returns True if and only if the input is a list of non-negative integers.";
|
|
IntegerOrListQ::usage="Returns True if and only if the input is a list of integers or an integer.";
|
|
PositiveIntegerOrListQ::usage="Returns True if and only if the input is a list of positive integers or a positive integer.";
|
|
NonnegativeIntegerOrListQ::usage="Returns True if and only if the input is a list of positive integers or a positive integer.";
|
|
|
|
|
|
SymbolQ::usage="Returns True if argument is an unassigned symbol.";
|
|
SymbolOrNumberQ::usage="Returns True if argument is a number of has head 'Symbol'";
|
|
|
|
|
|
(* ::Subsection:: *)
|
|
(*Implimentation*)
|
|
|
|
|
|
Begin["`Private`"];
|
|
|
|
|
|
AnyQ[cond_, L_] := Fold[Or, False, cond /@ L]
|
|
|
|
|
|
AnyElementQ[cond_,L_]:=AnyQ[cond,Flatten[L]]
|
|
|
|
|
|
AllQ[cond_, L_] := Fold[And, True, cond /@ L]
|
|
|
|
|
|
AllElementQ[cond_, L_] := Fold[And, True, cond /@ L]
|
|
|
|
|
|
AnyNonzeroQ[L_]:=AnyElementQ[#!=0&,L]
|
|
|
|
|
|
PossiblyNonzeroQ[expr_]:=PossiblyTrueQ[expr!=0]
|
|
|
|
|
|
AnyPossiblyNonzeroQ[expr_]:=AnyElementQ[PossiblyNonzeroQ,expr]
|
|
|
|
|
|
RealQ[n_]:=TrueQ[Im[n]==0];
|
|
|
|
|
|
PositiveQ[n_]:=Positive[n];
|
|
|
|
|
|
PositiveIntegerQ[n_]:=PositiveQ[n]\[And]IntegerQ[n];
|
|
|
|
|
|
NonnegativeQ[n_]:=TrueQ[RealQ[n]&&n>=0];
|
|
|
|
|
|
NonnegativeIntegerQ[n_]:=NonnegativeQ[n]\[And]IntegerQ[n];
|
|
|
|
|
|
IntegerListQ[input_]:=ListQ[input]&&Not[MemberQ[IntegerQ/@input,False]];
|
|
|
|
|
|
IntegerOrListQ[input_]:=IntegerListQ[input]||IntegerQ[input];
|
|
|
|
|
|
PositiveIntegerListQ[input_]:=IntegerListQ[input]&&Not[MemberQ[Positive[input],False]];
|
|
|
|
|
|
PositiveIntegerOrListQ[input_]:=PositiveIntegerListQ[input]||PositiveIntegerQ[input];
|
|
|
|
|
|
NonnegativeIntegerListQ[input_]:=IntegerListQ[input]&&Not[MemberQ[NonnegativeIntegerQ[input],False]];
|
|
|
|
|
|
NonnegativeIntegerOrListQ[input_]:=NonnegativeIntegerListQ[input]||NonnegativeIntegerQ[input];
|
|
|
|
|
|
SymbolQ[a_]:=Head[a]===Symbol;
|
|
|
|
|
|
SymbolOrNumberQ[a_]:=NumericQ[a]||Head[a]===Symbol;
|
|
|
|
|
|
End[];
|
|
|
|
|
|
(* ::Section:: *)
|
|
(*Epilogue*)
|
|
|
|
|
|
EndPackage[];
|