This program is dedicated to my teacher, Prof. Dimiter Skordev.
last build from February 21, 2019
Open source Prolog compiler under the AntiGNU license.
This program is part of AI - Project.
Download Strawberry Prolog Light. This is our free edition.
Strawberry Prolog is being developed in the Institute of Mathematics and Informatics – Bulgarian Academy of Sciences and in the
Faculty of Mathematics and Informatics – University of Sofia.
This Prolog compiler is part from the AI project.
This Prolog compiler is part from the AI project.
Metro – Metro where every wagon has its own opinion (version 2.0 from 22 May, 2017).
We present a new scheme for the wagon movement which will increase the capacity of the metro tube with 17%.
This will decrease the traveling time by 10% and the power consumption by 20% (Read this article).
WarCraft – Action game! One epic battle in an infinite forest. (The map is really infinite. This is not a joke!)
3D Studio – You can create your own 3D world and to move in it in order to see everything from a different point of view.
Digital TV – Compression and decompression of video signal. New format for the Digital TV of the future.
Fractals – You will see an infinite fractals field in which you can move and even get lost.
MultiTetris – New variant of the game Tetris where several figures fail down simultaneously.
Chess – You will see how easy it is to make a Chess Playing Program with Strawberry Prolog.
Galvanic Line – Real program for real galvanic line.
New syntax of some of the built-in predicates. For example the predicate window has about 20 arguments. Of course, it would be terrible to write all of them to create a simple window. Instead, you can write only these parameters which are important for you, others will be filled by default. For example you can write window(icon("Icon.ico"), size(100, 120) ) or even only window( ).
Better debugger and better visualization in the Proof Tree window.
You can embed ActiveX objects in your Prolog program by the predicate embed_server. Also you can receive events from OLE servers (ActiveX objects). When your Prolog program is OLE server then by the predicate raise_event it can send events to its client program.
You can call external functions from DLL files and from OLE servers. You can call Prolog program as OLE server but for the moment you cannot call it as DLL.
A special tool called Object Browser which gives you the possibility to view the methods and properties of the OLE servers which are installed on your computer (like MS Word, Corel Draw, etc.). This will make easier the task for creating Prolog programs which are using these servers.
You can use ODBC is order to work with databases. The support of ODBC is made through OLE server ADODB.Connection.
You have support of Unicode. Also, you can use different char sets and you can change the char set in the time of program execution by the predicate char_set.
You will find some new and very powerful predicates like print_file. By this predicates and functions you can create really exiting text processing programs. For example the software of Second-Box is made entirely on Strawberry Prolog.
Strawberry Prolog now has Syntax Coloring.
Support of Object Oriented Programming (this feature is still under development).
You already have the possibility to define your own built-in predicates, functions and constants and even if you like you can specify the types of their arguments. This extension of the Prolog language is so convenient that we are sure it soon will be accepted also from the other Prolog compilers.
Global variables which give you the possibility to access their values in different places of your program. Use of global variables is so powerful that with them you can avoid the use of assert in the most cases. This innovation already is accepted from some of the competitor’s Prolog compilers.
Support of SQL servers, TCP/IP Sockets and Cookies. These innovations are important for creating Prolog CGI Scripts.
Many new predicates for work with window's messages. (Look at sample program Fractals.pro in order to see them.)
Predicate := is now working with any type of terms. (In the previous versions it was not possible to use it with open terms, which was a serious restriction.)
A new powerful cut predicate. For example, cut(1) is the same as !, cut(2) cuts more than ! and cut(0.5) cuts less than !.
Strawberry Prolog and Internet.
Strawberry Prolog already covers one of the main problems connected with the creating Web sites and this is the problem for creating programs which can run directly on the server to provide service for your web site visitors. All functionality on this site is made as Strawberry Prolog CGI Scripts. To receive an idea of them you can go to play some games or to visit our chat room (all this is made on Strawberry Prolog).
Strawberry Prolog will cover soon also the second fundamental problem in the web design: How to include in your site programs which will run on the computer of your web site visitor. To cope with this problem Strawberry Prolog will support the Plug-In technology. In order to handle this task people use Java applets or ActiveX controls for the moment .
What is Strawberry Prolog?
Prolog is a language of a higher level. This turns out to be an advantage and disadvantage at the same time. On one hand it shortens the time of your program development and on the other it may sometimes affect the efficiency. Prolog programs usually work slower than the programs written on language like C but the problem is not in the language but in the Prolog compilers.
What does it mean "a higher level"?
On a low level you describe the way for solving your problem. In Assembler (the lowest level) you describe everything in the style: "get the contents from this register and put it in that one". In C you do not care about the registers (leaving this to the compiler) and write in the style: "get the contents from this memory box (variable) and put it in that one". In Prolog the approach is different. You describe your problem but do not say how it can be solved (leaving this to the compiler). For example, you can say that you need the answer to a question.
Why are low-level programs more efficient?
Because you are cleverer than the compiler. If you take care of the registers you will do it better than any compiler. Of course, this is true only for small programs. If the program is too large then the optimizer will do this routine work better than you will.
Does it matter to work on the low level?
Yes, sometimes but only for very short and responsible subroutines which will run billions of times. Sometimes you can achieve the opposite effect. This happens often with different software companies. They have a program written on C and rewrite it on an assembler to achieve higher efficiency, however they obtain a slower one instead. This is because sometimes when the source is very big the compiler manages to find better solution than the human being and because the C compilers are already quite good and it is not easy to write a more optimal program than the compiler.
Are the Prolog compilers good enough?
The answer is no. We believe that Strawberry Prolog is the best choice but it is still far from being perfect, either. For this reason (so far) if you write two programs, one in C and second in Prolog, then the first will be the faster one. Nevertheless you will waste too much time writing a C program that it does not worth the effort. Even if you are working on a big and complicated project it may be impossible to do it in C (Pascal, FORTRAN) because you will be lost in small details and the idea of your project will become vague. If you want to use the Windows interface it will take plenty of time to study environments like Visual Basic, Delphi or Visual C++, it will be easier to do this with Strawberry Prolog where there is no need to study (just look at the examples). For the moment we give you less possibilities than Visual C++ and even less than Visual Basic. However, this product is a quickly developing one and soon we will bridge the gaps.
How are we going to develop a Prolog language?
Prolog is a high-level language and employing it you describe the nature of your problem but not the way to its solution. The compiler has to find this way itself. Unfortunately the compiler is not very clever and searches the answer in the tree from left to right, depth first. This way of searching often causes infinite loops. Many of these loops are absolutely ridiculous like A=B if B=A, B=A if A=B and so on. Other loops are much more complicated. Our goal is to build in the compiler the possibility to catch all foolish loops and make in this way Prolog language much more powerful. You can read more about loop checking (the most important Strawberry Prolog feature) in the "Periodical Cyclings in Prolog" (zipped PostScript file). This is the Master's thesis of Dimiter Dobrev (the leader of our team). The Loop Checking implementation will be available in version 3.0. Presently we are working on the theoretical part of the Loop Checker.