mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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[];
 |