% BEGIN LICENSE BLOCK % Version: CMPL 1.1 % % The contents of this file are subject to the Cisco-style Mozilla Public % License Version 1.1 (the "License"); you may not use this file except % in compliance with the License. You may obtain a copy of the License % at www.eclipse-clp.org/license. % % Software distributed under the License is distributed on an "AS IS" % basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See % the License for the specific language governing rights and limitations % under the License. % % The Original Code is The ECLiPSe Constraint Logic Programming System. % The Initial Developer of the Original Code is Cisco Systems, Inc. % Portions created by the Initial Developer are % Copyright (C) 1994 - 2006 Cisco Systems, Inc. All Rights Reserved. % % Contributor(s): % % END LICENSE BLOCK % % @(#)umsusing.tex 1.10 94/12/06 % % \comment{@(\#)text1.mss 20.4 9/19/88} % % REL DATE BY DESCRIPTION % 2.10 260489 David Miller Convert to LaTeX and update % \newcommand{\guitext}[1]{\mbox{\texttt{#1}}} \newcommand{\keyboard}[1]{{\texttt{#1}}} %\newcommand{\menu}[1]{{\texttt{#1}}} %\newcommand{\menuopt}[1]{{\texttt{#1}}} %\newcommand{\button}[1]{{\texttt{#1}}} \newcommand{\menu}[1]{\guitext{#1}} \newcommand{\menuopt}[1]{\guitext{#1}} \newcommand{\button}[1]{\guitext{#1}} \newcommand{\ignore}[1]{} %------------------------------------------------------------------------ \chapter{Getting started with {\eclipse}} %HEVEA\cutdef[1]{section} %------------------------------------------------------------------------ \label{chapusing} %------------------------------------------------------------------------ \section{How do I install the {\eclipse} system?} %------------------------------------------------------------------------ Please see the installation notes that came with {\eclipse}. For Unix/Linux systems, these are in the file \notation{README_UNIX}. For Windows, they are in the file \notation{README_WIN.TXT}. Please note that choices made at installation time can affect which options are available in the installed system. %------------------------------------------------------------------------ \section{How do I run my {\eclipse} programs?} %------------------------------------------------------------------------ There are two ways of running {\eclipse} programs. The first is using \notation{tkeclipse}, which provides an interactive graphical user interface to the {\eclipse} compiler and system. The second is using \notation{eclipse}, which provides a more traditional command-line interface. We recommend you use {\tkeclipse} unless you have some reason to prefer a command-line interface. %------------------------------------------------------------------------ \section{How do I use \notation{\tkeclipse}?} %------------------------------------------------------------------------ \subsection{Getting started} To start {\tkeclipse}, either type the command \notation{tkeclipse} at an operating system command-line prompt, or select {\tkeclipse} from the program menu on Windows. This will bring up the {\tkeclipse} top-level, which is shown in Figure~\ref{tktop}. \begin{figure}[bt] \begin{center} % funny pathname because this chapter gets included from tutorial as well \resizebox{0.8\textwidth}{!}{\includegraphics{tktop.eps}} \end{center} \caption{{\tkeclipse} top-level} \label{tktop} \end{figure} Note that help on {\tkeclipse} and its component tools is available from the \menu{Help} menu in the top-level window. If you need more information than can be found in this manual, try looking in the \menu{Help} menu. %------------------------------------------------------------------------ \section{How do I write an {\eclipse} program?} %------------------------------------------------------------------------ You must use an editor to write your programs. {\eclipse} does not come with an editor, but any editor that can save plain text files can be used. Save your program as a plain text file, and you can then compile the program into {\eclipse} and run it. With {\tkeclipse}, you can specify the editor you want to use, and this editor will be started by {\tkeclipse}, e.g., when you select a file in the `Edit' option under the File menu. The default values are the value of the VISUAL environment variable under Unix, or Wordpad under Windows. This can be changed with the Preference Editor under the Tools menu. %------------------------------------------------------------------------ \subsection{Compiling a program} From the \menu{File} menu, select the \menuopt{Compile ...} option. This will bring up a file selection dialog. Select the file you wish to compile, and click on the \button{Open} button. This will compile the file and any others it depends on. Messages indicating which files have been compiled and describing any errors encountered will be displayed in the bottom portion of the {\tkeclipse} window (\guitext{Output and Error Messages}). If a file has been modified since it was compiled, it may be recompiled by clicking on the \guitext{make} button. This recompiles any files which have become out-of-date. For more information on program compilation and the compiler, please see chapter \ref{chapcompiler}. %------------------------------------------------------------------------ \subsection{Executing a query} To execute a query, first enter it into the \guitext{Query Entry} text field. You will also have to specify which module the query should be run from, by selecting the appropriate entry from the drop-down list to the left of the \guitext{Query Entry} field. Normally, the default selection of \guitext{eclipse} will be fine; this will allow access to all {\eclipse} built-ins and all predicates that have not explicitly been compiled into a different module. Selecting another module for the query is only needed if you wish to call a predicate which is not visible from the \notation{eclipse} module, in which case you must select that module. (For more information about the module system, please see chapter \ref{chapmodules}.) To actually execute the query, either hit the \keyboard{Enter} key while editing the query, or click on the \guitext{run} button. {\tkeclipse} maintains a history of commands entered during the session, and these may be recalled either by using the drop-down list to the right of the \guitext{Query Entry} field, or by using the up and down arrow keys while editing the \guitext{Query Entry} field. If {\eclipse} cannot find a solution to the query, it will print \notation{No} in the \guitext{Results} section of the {\tkeclipse} window. If it finds a solution and knows there are no more, it will print it in the \guitext{Results} section, and then print \notation{Yes}. If it finds a solution and there may be more, it will print the solution found as before, print \notation{More}, and enable the \guitext{more} button. Clicking on the \guitext{more} button tells {\eclipse} to try to find another solution. In all cases it also prints the total time taken to execute the query. Note that a query can be interrupted during execution by clicking on the \guitext{interrupt} button. %------------------------------------------------------------------------ \subsection{Editing a file} \label{secedit} If you wish to edit a file (e.g., a program source file), then you may do so by selecting the \guitext{Edit ...} option from the \guitext{File} menu. This will bring up a file selection dialog. Select the file you wish to edit, and click on the \guitext{Open} button. When you have finished editing the file, save it. After you've saved it, if you wish to update the version compiled into {\eclipse} (assuming it had been compiled previously), simply click on the \guitext{make} button. You can change which program is used to edit your file by using the {\tkeclipse} Preference Editor, available from the \guitext{Tools} menu. %------------------------------------------------------------------------ \subsection{Debugging a program} \label{secdebug} To help diagnose problems in {\eclipse} programs, {\tkeclipse} provides the tracer. This can be invoked by selecting the \guitext{Tracer} option from the \guitext{Tools} menu. The next time a goal is executed, the tracer window will become active, allowing you to step through the program's execution and examine the program's state as it executes. The tracer displays the current call stack, the program source, and a trace log. By using the left mouse button in the \guitext{Call Stack} region of the tracer window, you can bring up a menu of additional operations you can perform on that goal, such as inspecting it, or setting a spy point on the predicate in question. Source breakpoints can be set by marking the corresponding line in the tracer's source display. Selecting \guitext{Configure filter ...} from the \guitext{Options} menu of the tracer will launch the conditional filter. This filter allows you to specify conditions on which the tracer should stop at a debug port. This can be very useful for skipping over unwanted debug ports. For more information on using the tracer, please see the online help, available by selecting \guitext{Tracer Help} from the \guitext{Help} menu. Other {\tkeclipse} tools which are useful while using the tracer are: \begin{itemize} \item the predicate browser (available by selecting the \guitext{Predicate Browser} option from the \guitext{Tools} menu), which is useful for setting or removing spy points on predicates, or for setting the \notation{start_tracing} flag which activates the tracer when a particular predicate is called for the first time; and \item the term inspector (available by double left clicking on a term from the stack window, or by selecting the \guitext{Inspector} option from the \guitext{Tools} menu), which is useful for examining and browse the arguments of a term in detail. \item the delayed goals browser (available by selecting the \guitext{Delayed Goals} option from the \guitext{Tools} menu), which allows you to inspect the current list of delayed goals. \item the display matrix (available either from calls in user's code, or by interactively selecting terms to be observed from the inspector, tracer or delay goals tools), which allows you to monitor any changes to a term and its arguments. \end{itemize} More information about debugging in {\eclipse} may be found in chapter \ref{chapdebug}. %------------------------------------------------------------------------ \subsection{Getting help} More detailed help than is provided here can be obtained online. Simply select the entry from the \guitext{Help} menu on {\tkeclipse}'s top-level window which corresponds to the topic or tool you are interested in. %------------------------------------------------------------------------ \subsection{Other tools} {\tkeclipse} comes with a number of useful tools. Some have been mentioned above, but here is a more complete list. Note that we only provide brief descriptions here; for more details, please see the online help for the tool in question. \subsubsection{Compile scratch-pad} This tool allows you to enter small amounts of program code and have it compiled. This is useful for quick experimentation, but not for larger examples or programs you wish to keep, since the source code is lost when the session is exited. \subsubsection{Source File Manager} This tool allows you to keep track of and manage which source files have been compiled in the current {\eclipse} session. You can select files to edit them, or compile them individually, as well as adding new files. \subsubsection{Predicate Browser} This tool allows you to browse through the modules and predicates which have been compiled in the current session. It also lets you alter some properties of compiled predicates. \subsubsection{Source Viewer} This tool attempts to display the source code for predicates selected in other tools. \subsubsection{Delayed Goals} This tool displays the current delayed goals, as well as allowing a spy point to be placed on the predicate and the source code viewed. \subsubsection{Tracer} As discussed in section \ref{secdebug}, the tracer is useful for debugging programs. See also chapter \ref{chapdebug}. \subsubsection{Inspector} This tool provides a graphical browser for inspecting terms. Goals and data terms are displayed as a tree structure. Sub-trees can be collapsed and expanded by double-clicking. A navigation panel can be launched which provides arrow buttons as an alternative way to navigate the tree. Note that while the inspector window is open, interaction with other {\tkeclipse} windows is disallowed. This prevents the term from changing while being inspected. To continue {\tkeclipse}, the inspector window must be closed. \subsubsection{Global Settings} This tool allows the setting of some global flags governing the way {\eclipse} behaves. See also the documentation for the \bipref{set_flag/2}{../bips/kernel/env/set_flag-2.html} and \bipref{get_flag/2}{../bips/kernel/env/get_flag-2.html} predicates. \subsubsection{Statistics} This tool displays some statistics about memory and CPU usage of the {\eclipse} system, updated at regular intervals. See also the documentation for the \bipref{statistics/0}{../bips/kernel/env/statistics-0.html} and \bipref{statistics/2}{../bips/kernel/env/statistics-2.html} predicates. \subsubsection{Simple Query} This tool allows the user to send a simple query to {\eclipse} even while {\eclipse} is running some program and the Toplevel Query Entry window is unavailable. Note that the reply is shown in EXDR format (see the {\eclipse} Embedding and Interfacing Manual). \subsubsection{Library Help} This tool allows you to browse the online help for the {\eclipse} libraries. On the left is a tree display of the libraries available and the predicates they provide. \begin{itemize} \item Double clicking on a node in this tree either expands it or collapses it again. \item Clicking on an entry displays help for that entry to the right. \item Double clicking on a word in the right-hand pane searches for help entries containing that string. \end{itemize} You can also enter a search string or a predicate specification manually in the text entry box at the top right. If there is only one match, detailed help for that predicate is displayed. If there are multiple matches, only very brief help is displayed for each; to get detailed help, try specifying the module and/or the arity of the predicate in the text field. \subsection{Preference Editor} This tool allows you to edit and set various user preferences. This include parameters for how {\tkeclipse} will start up, e.g., the amount of memory it will be able to use, and an initial query to execute; and parameters which affects the appearance of {\tkeclipse}, such as the fonts {\tkeclipse} uses. %------------------------------------------------------------------------ \section{How do I use \notation{eclipse}?} %------------------------------------------------------------------------ \subsection{Getting started} To start {\eclipse}, type the command \notation{eclipse} at an operating system command-line prompt. This will display something like this: \begin{quote} \begin{verbatim} % eclipse ECLiPSe Constraint Logic Programming System [kernel] Kernel and basic libraries copyright Cisco Systems, Inc. and subject to the Cisco-style Mozilla Public Licence 1.1 (see legal/cmpl.txt or eclipseclp.org/licence) Source available at www.sourceforge.org/projects/eclipse-clp GMP library copyright Free Software Foundation, see legal/lgpl.txt For other libraries see their individual copyright notices Version X.Y #Z, DAY MONTH DD HH:MM YYYY [eclipse 1]: \end{verbatim} \end{quote} The list in square brackets on the first line specifies the configuration of the running system, i.e., the language extensions that are present. The copyright and version information is followed by the prompt \notation{[eclipse 1]:}, which tells the user that the top-level loop is waiting for a user query in the module \notation{eclipse}. The predicate \predspecidx{help/0} gives general help and \bipref{help/1}{../bips/kernel/env/help-1.html} gives help about specific built-in predicates. %------------------------------------------------------------------------ \subsection{Interacting with the top level loop} The {\eclipse} prompt \notation{[eclipse 1]:} indicates that {\eclipse} is at the top level and the opened module is \notation{eclipse}. The \aboutidx{top level loop} is a procedure which repetitively prompts the user for a query, executes it and reports its result, i.e., either the answer variable bindings or the failure message. There is always exactly one module opened in the top level and its name is printed in the prompt. From this point it is possible to enter {\eclipse} goals, e.g., to pose queries, to enter an {\eclipse} program from the keyboard or to compile a program from a file. Goals are entered after the prompt and are terminated by fullstop and newline. The {\eclipse} system may be exited by typing \notation{CTRL-D} (UNIX) or \notation{CTRL-Z} + \notation{RETURN} (Windows) at the top level prompt, \index{Exiting {\eclipse}} or by calling either the \bipref{halt/0}{../bips/kernel/opsys/halt-0.html} or the \bipref{exit/1}{../bips/kernel/opsys/exit-1.html} predicates. %------------------------------------------------------------------------ \subsection{Compiling a program} The square brackets \notation{[}\pattern{...}\notation{]} or the \bipref{compile/1}{../bips/kernel/compiler/compile-1.html} predicate are used to compile {\eclipse} source from a file. If the goal \begin{quote} \begin{verbatim} compile(myfile). \end{verbatim} \end{quote} or the short-hand notation \begin{quote} \begin{verbatim} [myfile]. \end{verbatim} \end{quote} is called, either as a query at the top level or within another goal, the system looks for the file \notation{myfile} or for a file called \notation{myfile.pl} or \notation{myfile.ecl} and compiles it. The short-hand notation may also be used to compile several files in sequence: \begin{quote} \begin{verbatim} [ file_1, file_2, ..., file_n ] \end{verbatim} \end{quote} The \bipref{compile/2}{../bips/kernel/compiler/compile-2.html} predicate may be used to compile a file or list of files into a module specified in the second argument. If a file has been modified since it was compiled, it may be recompiled by invoking the \bipref{make/0}{../bips/kernel/env/make-0.html} predicate. This recompiles any files which have become out-of-date. For more information on program compilation and the compiler, please see chapter \ref{chapcompiler}. %------------------------------------------------------------------------ \subsection{Entering a program from the terminal} Programs can be entered directly from the terminal, as well as being read from files. To do this, simply compile the special file \notation{user}. That is, \notation{[user].} or \notation{compile(user).} at a top level prompt. The system then displays the compiler prompt (which is a blank by default) and waits for a sequence of clauses. Each of the clauses is terminated by a fullstop.% \index{fullstop}\index{clause!termination} (If the fullstop is omitted the system just sits waiting, because it supposes the clause is not terminated. If you omit the fullstop by accident simply type it in on the following line, and then proceed to type in the program clauses, each followed by a fullstop and carriage return.) To return to the top level prompt, type CTRL-D (UNIX), CTRL-Z + RETURN (Windows) or enter the atom \notation{end_of_file} followed by fullstop and RETURN. For example: \begin{quote} \begin{verbatim} [eclipse 1]: [user]. source_processor.eco loaded in 0.01 seconds ... ecl_compiler.eco loaded in 0.23 seconds father(abraham, isaac). father(isaac, jacob). father(jacob, joseph). ancestor(X, Y) :- father(X, Y). ancestor(X, Y) :- ancestor(X, Z), ancestor(Z, Y). ^D tty compiled 420 bytes in 0.01 seconds Yes (0.24s cpu) [eclipse 2]: \end{verbatim} \end{quote} The two predicates \predspec{father/2} and \predspec{ancestor/2} are now compiled and can be used. %------------------------------------------------------------------------ \subsection{Executing a \Index{query}} Once a set of clauses has been compiled, it may be queried in the usual Prolog manner. If there are uninstantiated \Index{variables} in the query, the system will attempt to find an instantiation of them which will satisfy the query, and if successful it will display one such instantiation. If potentially there is another solution, the top level will then wait for a further instruction: either a \notation{} (``newline'' or ``return'') or a semi-colon (\notation{;}). A return will end the query successfully. A semi-colon will initiate \Index{backtracking} in an attempt to find another solution to the query. Note that it is not necessary to type a new line after the semicolon --- one keystroke is enough. When the top level loop can detect that there are no further solutions, it does not wait for the semicolon or newline, but it displays directly the next prompt. For example in a query on a family database: \begin{quote} \begin{verbatim} [eclipse 3]: father(X, Y). X = abraham Y = isaac Yes (0.00s cpu, solution 1, maybe more) ? ; (user types ';') X = isaac Y = jacob Yes (0.00s cpu, solution 2) [eclipse 4]: \end{verbatim} \end{quote} Queries may be extended over more than one line. When this is done the prompt changes to a tabulation character, i.e., the input is indented to indicate that the query is not yet completed. The fullstop marks the end of the input. %------------------------------------------------------------------------ \subsection{Interrupting the execution\index{interrupt}} If a program is executing, it may be interrupted by typing \notation{CTRL-C} (interrupt in the UNIX environment). This will invoke the corresponding interrupt handler (see section \ref{sectinterrupts}). By default, the system prints a menu offering some alternatives: \begin{quote} \begin{verbatim} ^C interruption: type a, b, c, e, or h for help : ? h (user types 'h') help a : abort b : break level c : continue e : exit h : help interruption: type a, b, c, e, or h for help : ? \end{verbatim} \end{quote} The \notation{a} option returns to the toplevel, \notation{b} starts a nested toplevel, \notation{c} continues the interrupted execution, and \notation{e} is an emergency exit of the whole {\eclipse} session. If the debugger is running, an additional option \notation{d} is displayed: it switches the debugger to creep mode. The execution of {\eclipse} may be suspended by typing \notation{CTRL-Z} (suspend) or by calling \bipref{pause/0}{../bips/kernel/opsys/pause-0.html}. This will suspend the {\eclipse} process and return the UNIX prompt. Entering the shell command \notation{fg} will return to {\eclipse}. Note that this feature may not be available on all systems. %------------------------------------------------------------------------ \subsection{Debugging a program} Please see the chapters on debugging in the tutorial and user manuals for more details. The tutorial chapter covers the {\tkeclipse} debugging in a tutorial style tour, and the user manual chapter covers debugging in general and the command-line debugger in particular. %------------------------------------------------------------------------ \subsection{The \Index{history} mechanism} The {\eclipse} toplevel loop provides a simple history mechanism which allows the examination and repetition of previous queries. The history list is printed with the command \notation{h}. A previous query is invoked by typing either its absolute number or its relative negative offset from the current query number (i.e., --1 will execute the previous query). The current query number is displayed in the toplevel prompt. The history is initialized from the file \notationidx{.eclipse_history} in the current directory or in the home directory. This file contains the history goals, each ended by a fullstop. The current history can be written using the predicate \bipref{write_history/0}{../bips/lib/toplevel/write_history-0.html} from the \notation{util} library. %------------------------------------------------------------------------ \subsection{Getting \Index{help}} Detailed documentation about all the predicates in the {\eclipse} libraries can be obtained online through the help facility. It has two modes of operation. First, when a fragment of a built-in name is specified, a list of short descriptions of all built-ins whose name contains the specified string is printed. For example, \begin{quote} \begin{verbatim} :- help(write). \end{verbatim} \end{quote} will print one-line descriptions about \predspec{write/1}, \predspec{writeclause/2}, etc. When a unique specification is given, the full description of the specified built-in is displayed, e.g., in \begin{quote} \begin{verbatim} :- help(write/1). \end{verbatim} \end{quote} %------------------------------------------------------------------------ \section{How do I make things happen at compile time?} %------------------------------------------------------------------------ A file being compiled may contain queries.\index{query} These are goals preceded by the symbol ``:-''. As soon as a query is encountered in the compilation of a file, the {\eclipse} system will try to satisfy it. Thus by inserting goals in this fashion, things can be made to happen at compile time. In particular, a file can contain a directive to the system to compile another file, and so large programs can be split between files, while still only requiring a single simple command to compile them.% \index{compilation!nesting compile commands} When this happens, {\eclipse} interprets the pathnames of the nested compiled files relative to the directory of the parent compiled file; if, for example, the user calls \begin{quote} \begin{verbatim} [eclipse 1]: compile('src/pl/prog'). \end{verbatim} \end{quote} and the file src/pl/prog.pl contains a query \begin{quote} \begin{verbatim} :- [part1, part2]. \end{verbatim} \end{quote} then the system searches for the files \notation{part1.pl} and \notation{part2.pl} in the directory \notation{src/pl} and not in the current directory. Usually larger {\eclipse} programs have one main file which contains only commands to compile all the subfiles. In {\eclipse} it is possible to compile this main file from any directory. (Note that if your program is large enough to warrant breaking into multiple files (let alone multiple directories), it is probably worth turning the constituent components into modules --- see chapter \ref{chapmodules}.) %------------------------------------------------------------------------ \section{How do I use {\eclipse} \Index{libraries} in my programs?} %------------------------------------------------------------------------ A number of files containing library predicates are supplied with the {\eclipse} system. These predicates provide utility functions for general use. They are usually installed in an {\eclipse} library directory (or directories). These predicates are either loaded automatically by {\eclipse} or may be loaded ``by hand''. During the execution of an {\eclipse} program, the system may dynamically load files containing library predicates. When this happens, the user is informed by a compilation or loading message. It is possible to explicitly force this loading to occur by use of the \bipref{lib/1}{../bips/kernel/compiler/lib-1.html} or \bipref{use_module/1}{../bips/kernel/modules/use_module-1.html} predicates. e.g., to load the library called \notation{lists}, use one of the following goals: \begin{quote} \begin{verbatim} lib(lists) use_module(library(lists)) \end{verbatim} \end{quote} This will load the library file unless it has been already loaded. In particular, a program can ensure that a given library is loaded when it is compiled, by including an appropriate directive in the source, e.g., \notation{:- lib(lists).} Library files are found by searching the \Index{library path}\index{library search path} and by appending a suffix to the library name. The search path used when loading libraries is specified by the global flag \notation{library_path} using the \bipref{get_flag/2}{../bips/kernel/env/get_flag-2.html} and \bipref{set_flag/2}{../bips/kernel/env/set_flag-2.html} predicates. This flag contains a list of strings containing the pathnames of the directories to be searched when loading a library file. User libraries may be be added to the system simply by copying the desired file into the {\eclipse} library directory. Alternatively the \notation{library_path} flag may be updated to point at a number of user specific directories. The following example illustrates how a directive may be added to a file to add a user-defined library in front of any existing system libraries. \begin{quote} \begin{verbatim} ?- get_flag(library_path,Path), set_flag(library_path, ["/home/myuser/mylibs" | Path]). \end{verbatim} \end{quote} The UNIX environment variable \notationidx{ECLIPSELIBRARYPATH} may also be used to specify the initial setting of the library path. The syntax is similar to the syntax of the UNIX PATH variable, i.e., a list of directory names separated by colons. The directories will be prepended to the standard library path in the given order. %------------------------------------------------------------------------ \section{How do I make my programs run faster?} %------------------------------------------------------------------------ By default, {\eclipse} compiles programs as \about{traceable}, which means that they can be traced using the built-in debugger. To obtain maximum efficiency, the directive \bipref{nodbgcomp/0}{../bips/kernel/obsolete/nodbgcomp-0.html} should be used, which will set some flags to produce a more efficient and shorter code: \begin{quote} \begin{verbatim} [eclipse 2]: nodbgcomp. yes. [eclipse 3]: [user]. father(abraham, isaac). father(isaac, jacob). father(jacob, joseph). ancestor(X, Y) :- father(X, Y). ancestor(X, Y) :- ancestor(X, Z), ancestor(Z, Y). user compiled optimized 396 bytes in 0.02 seconds yes. [eclipse 4]: \end{verbatim} \end{quote} Section \ref{secefficientcode} contains more detailed discussion on other techniques which can be used to optimise your programs. %------------------------------------------------------------------------ \section{Other tips} %------------------------------------------------------------------------ %------------------------------------------------------------------------ \subsection{Initialization at start-up} If you wish to have {\eclipse} do or execute things at startup time, you can achieve this in {\tkeclipse} by setting the initial query call in the Preference editor; and in the command-line \notation{eclipse} by putting via a \notation{.eclipserc} file. For \notation{eclipse}, before displaying the initial prompt, the system checks whether there is a file called \notationidx{.eclipserc}\index{initialization file}\label{eclipserc} in the current directory and if not, in the user's home directory. If such a file is found, {\eclipse} compiles it first. Thus it is possible to put various initialization commands into this file. {\eclipse} has many possibilities to change its default behaviour and setting up a \notation{.eclipserc} file is a convenient way to achieve this. A different name for the initialization file can be specified in the environment variable \notationidx{ECLIPSEINIT}. If \notation{ECLIPSEINIT} is set to an empty string, no initialization is done. If the system is started with a -e option, then the \notation{.eclipserc} file is ignored. For {\tkeclipse}, the system will make the initial query call as set in the Preference Editor before giving control to the user. This call can be set to compile an initialization file. This can be the \notation{.eclipserc} file, or some other file if the user wants to initialize the system differently in {\tkeclipse}. %------------------------------------------------------------------------ \subsection{Recommended file names} It is recommended programming practice to give the Prolog source programs the suffix \notation{.pl}, or \notation{.ecl} if it contains {\eclipse} specific code. It is not enforced by the system, but it simplifies managing the source programs. The \bipref{compile/1}{../bips/kernel/compiler/compile-1.html} predicate automatically adds the suffix to the file name, so that it does not have to be specified; if the literal file name can not be found, the system tries appending each of the valid suffixes in turn and tries to find the resulting file name. The system's list of valid Prolog suffixes is in the global flag \notationidx{prolog_suffix} and can be examined and modified using \bipref{get_flag/2}{../bips/kernel/env/get_flag-2.html} and \bipref{set_flag/2}{../bips/kernel/env/set_flag-2.html}. For example, to add the new suffix \notation{.pro} use: \begin{quote} \begin{verbatim} get_flag(prolog_suffix, Old), set_flag(prolog_suffix, [".pro"|Old]). \end{verbatim} \end{quote} %HEVEA\cutend