Skip to content

Instantly share code, notes, and snippets.

@thibaultlaurens
Last active May 1, 2020 08:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thibaultlaurens/4621448 to your computer and use it in GitHub Desktop.
Save thibaultlaurens/4621448 to your computer and use it in GitHub Desktop.
Oxford Brookes MSc - Coursework minor program - Haskell
/* solar system database */
star(sun).
/* name, type, distance_from_sun(UA), earth_masses */
planet(jupiter, gas, 5.2, 318).
planet(saturn, gas, 9.5, 95).
planet(uranus, gas, 19.6, 14).
planet(neptune, gas, 30, 17).
planet(earth, terrestrial, 1, 1).
planet(venus, terrestrial, 0.7, 0.815).
planet(mars, terrestrial, 1.5, 0.107).
planet(mercury, terrestrial, 0.4, 0.055).
satellite(ganymede, jupiter).
satellite(titan, saturn).
satellite(callisto, jupiter).
satellite(io, jupiter).
satellite(moon, earth).
satellite(europa, jupiter).
satellite(triton, neptune).
satellite(titania, uranus).
satellite(rhea, saturn).
satellite(oberon, uranus).
satellite(lapetus, saturn).
satellite(umbriel, uranus).
satellite(ariel, uranus).
satellite(dione, saturn).
satellite(tethys, saturn).
satellite(enceladus, saturn).
satellite(miranda, uranus).
satellite(proteus, neptune).
satellite(mimas, saturn).
satellite(hyperion, saturn).
satellite(phoebe, saturn).
satellite(janus, saturn).
satellite(amalthea, jupiter).
satellite(epimetheus, saturn).
satellite(prometheus, saturn).
/* rules */
orbit(Pname, sun) :- planet(Pname,_,_,_).
orbit(Sname, Pname) :- satellite(Sname,Pname), planet(Pname,_,_,_).
is_satellite(Sname) :- satellite(Sname,Pname), planet(Pname,_,_,_).
has_satellite(Pname) :- satellite(Sname,Pname).
planet_by_type(Pname,TName) :- planet(Pname,TName,_,_).
satellite_by_type(Sname, TName) :- planet(Pname,TName,_,_), satellite(Sname,Pname).
distance_to_sun(Pname1, Pname2) :- planet(Pname1,_,Distance1,_), planet(Pname2,_,Distance2,_), Distance1 > Distance2.
mass_comparaison(Pname1, Pname2) :- planet(Pname1,_,_,Mass1), planet(Pname2,_,_,Mass2), Mass1 > Mass2.
count(P,Count) :- findall(1,P,L), length(L,Count).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment