Skip to content

A library of Prolog predicates for CLP(FD) arithmetic.

License

Notifications You must be signed in to change notification settings

JCumin/Arithmelog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arithmelog

A library of Prolog predicates for CLP(FD) arithmetic.

This module is here to provide simple predicates with descriptive names so that programs dealing with arithmetic become much more readable and declarative. We feel that there is a gap in built-in tools for arithmetic based on CLP(FD).

##How to use

###SWI-Prolog

Arithmelog is self-contained for SWI-Prolog.

###SICStus - Not-fully functional

For SICStus, Arithmelog requires CLP(Z) (by Markus Triska), available here. It also requires module(reif) (by Ulrich Neumerkel), available here.

##Available predicates

###Labeling

  • unsafe_label/1
  • unsafe_indomain/1

###Constraints

  • prime/1
  • composite/1
  • even/1
  • odd/1
  • divisible_by/2
  • polygonal_number/2
  • (<)/1: A list of strictly increasing integers.
  • (>)/1: A list of strictly decreasing integers.
  • (=<)/1: A list of increasing integers.
  • (>=)/1: A list of decreasing integers.
  • perfect_square/1

###Operators

  • sum/2
  • product/2
  • factorial/2
  • nth_root/3
  • floored_sqrt/2

###Miscellaneous

  • range/3

##Examples

?- prime(X), unsafe_indomain(X).
X = 2 ;
X = 3 ;
X = 5 ;
X = 7 ;
X = 11 ;
X = 13 ;
…


?- prime(X), even(X).
X = 2.


?- composite(X), prime(X).
false.


?- factorial(X, 720).
X = 6.


?- X #> Y, Y#> Z, prime(X), even(Y), composite(Z), divisible_by(Z, 7), product([X,Y,Z],P), unsafe_label([X,Y,Z]).
X = 17,
Y = 16,
Z = 14,
P = 3808 ;
X = 19,
Y = 16,
Z = 14,
P = 4256 ;
X = 19,
Y = 18,
Z = 14,
P = 4788 ;
…


?- range(I, J, [5,A,B,C,D]).
I = 5,
J = D, D = 9,
A = 6,
B = 7,
C = 8 ;
false.

About

A library of Prolog predicates for CLP(FD) arithmetic.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages