This is info/faq.info, produced by makeinfo version 4.8 from faq.texi. INFO-DIR-SECTION SICStus Prolog START-INFO-DIR-ENTRY * SICStus Prolog Frequently Asked Questions: (faq). SICStus Prolog FAQ. END-INFO-DIR-ENTRY Generated 10 May 2011.  File: faq.info, Node: Top, Next: About This Document, Prev: (dir), Up: (dir) SICStus Prolog Frequently Asked Questions ***************************************** This is a compilation of frequently asked question related to SICStus Prolog. * Menu: * About This Document:: About This Document * Introduction:: Introduction * Installation Problems:: Installation Problems * Runtime Problems:: Runtime Problems * Generic Prolog Programming:: Generic Prolog Programming * Interfacing with Other Languages:: Interfacing with Other Languages * Standard Prolog Compliance:: Standard Prolog Compliance * Miscellaneous:: Miscellaneous  File: faq.info, Node: About This Document, Next: Introduction, Prev: Top, Up: Top 1 About This Document ********************* This is a compilation of frequently asked question related to SICStus Prolog. It is maintained by the SICStus Prolog support team. Any questions about this FAQ should be sent to . Questions about SICStus Prolog should be addressed as follows: * Bug reports and technical support questions to Report bugs through the web interface `http://www.sics.se/sicstus/bugreport/bugreport.html'. or to * Questions regarding licensing, contracts, etc. to . This FAQ is _not_ intended for questions about the Prolog language in general. There is a specific Prolog FAQ for that, available at `http://www.cs.kuleuven.ac.be/~remko/prolog/faq/'  File: faq.info, Node: Introduction, Next: Installation Problems, Prev: About This Document, Up: Top 2 Introduction ************** QUESTION: What is SICStus Prolog? Prolog is a simple but powerful programming language developed at the University of Marseille, as a practical tool for programming in logic. From a user's point of view the major attraction of the language is ease of programming. Clear, readable, concise programs can be written quickly with few errors. SICStus Prolog is owned and maintained by the Swedish Institute of Computer Science. Parts of the system were developed by the project "Industrialization of SICStus Prolog" in collaboration with Ericsson Telecom AB, NobelTech Systems AB, Infologics AB and Televerket. in synch SICStus Prolog follows the mainstream Prolog tradition in terms of syntax and built-in predicates. As of release 3.8, SICStus Prolog provides two execution modes: the `iso' mode, which is fully compliant with the International Standard ISO/IEC 13211-1 (PROLOG: Part 1--General Core) (`http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+13211%2D1%2D1995'); and the `sicstus' mode, which is largely compatible with, e.g., C-Prolog and Quintus Prolog, supports code written in earlier versions of SICStus Prolog. QUESTION: Where can I get more information about SICStus Prolog? The main source of information about SICStus Prolog is the WWW-site at `http://www.sics.se/sicstus/'. and in particular the User's Manual, Release Notes, and this FAQ list, at `http://www.sics.se/isl/sicstuswww/site/documentation.html' QUESTION: Does SICStus run on platform XYZ? SICStus runs under most UNIX dialects and under Windows 98/NT/2000. For a current list of supported platforms, see the release notes. QUESTION: What do I need to run SICStus? * Disk space: 100 MB should be enough for packing up the binary installer and performing the installation. The actual installation will use less than half of that. 100 MB should also be enough to compile SICStus from the sources. * Memory usage: At least 8-16 Mb RAM, but more memory is recommended. * In order to use `library(tcltk)' you need a Tcl/Tk installation on your machine, see the release notes for information about what Tcl/Tk version you need and where you can get it. * In order to use `library(jasper)' you need a JNI compatible Java installation. See the release notes for supported versions and where you can get it. * In order to use `library(bdb)' you need a Berkeley DB. See the release notes for supported versions and where you gan get it. QUESTION: How can I get SICStus? SICStus is a commercial product and licensing information can be found on the WWW-site (`http://www.sics.se/sicstus/'). Free evaluation licenses are available. Upon completed license agreement, you will receive a mail containing download instructions including confidential passwords and encryption keys. Be sure to read the Release Notes before installation. If you are a university student, your department may have acquired the right to sub-license SICStus to its students. If that is the case, your department should provide to you download instructions and license codes for the relevant distributions. Your professor should know. QUESTION: How do I report a bug or some other problem? If you think you've discovered a bug or if you have another problem, first read this FAQ list, the release notes and the list of known bugs, at the Don't Panic page (http://www.sics.se/isl/sicstuswww/site/dontpanic.html) page at `http://www.sics.se/sicstus/'. If these do not address your problem, submit a bug report by filling in the form: `http://www.sics.se/sicstus/bugreport/bugreport.html'. If you are using an academic license, for example if you are a student, then you should primarily consult with the maintenance contact at your site.  File: faq.info, Node: Installation Problems, Next: Runtime Problems, Prev: Introduction, Up: Top 3 Installation Problems *********************** Some of the problems in this sections are UNIX (Windows) specific. These are marked _[UNIX]_ (_[Windows]_). * Menu: * Windows Installer Problems:: Windows Installer Problems * Corrupted Binary Files:: Corrupted Binary Files * Linux C Libraries:: Linux C Libraries * Configure Options:: Encryption Tools * Password Problems:: Password Problems * Problems Getting Started:: Problems Getting Started  File: faq.info, Node: Windows Installer Problems, Next: Corrupted Binary Files, Up: Installation Problems 3.1 Windows Installer Problems ============================== QUESTION: _[WINDOWS NT 4]_ The installer complains that `MSIEXEC' cannot be found. This happens if the installing user does not have `Administrator' rights. Either install as the user `Administrator' or ensure that the installing user have these rights during installation. If this is unclear, please contact your system administrator. This problem should not happen on other versions of Windows.  File: faq.info, Node: Corrupted Binary Files, Next: Linux C Libraries, Prev: Windows Installer Problems, Up: Installation Problems 3.2 Corrupted Binary Files ========================== QUESTION: _[UNIX]_ `gzip' says "stdin not in gzip format". This means that the input piped to `gzip' has been corrupted in some way. The most likely cause is that the original file `FILE.tar.gz' was downloaded incorrectly, typically in ASCII mode instead of binary mode.  File: faq.info, Node: Linux C Libraries, Next: Configure Options, Prev: Corrupted Binary Files, Up: Installation Problems 3.3 Linux C Libraries ===================== QUESTION: _[UNIX]_ I get the message ".../sp.exe: no such file or directory" when running SICStus, even though `sp.exe' is there. This error message appears when SICStus has been compiled using a different version of `libc.so' than your machine has installed. The message "no such file or directory" does not refer to `sp.exe' but to the particular `libc.so' version that SICStus expects. SICStus is currently available as binary distributions for `libc.so.6', a.k.a. `glibc', versions 2.0, 2.1 and 2.2. Make sure to download the correct version.  File: faq.info, Node: Configure Options, Next: Password Problems, Prev: Linux C Libraries, Up: Installation Problems 3.4 Configure Options ===================== These issues are mainly of concern when building SICStus from a source distribution. QUESTION: _[UNIX]_ I've changed the arguments to `configure', but nothing happens. The `configure' script maintains a cache-file called `config.cache'. This file has to be removed between configure-runs if you've changed the arguments. Alternatively, you can specify `--cache-file=/dev/null', causing configure to avoid creating a cache-file entirely. QUESTION: _[UNIX]_ The configure script seems to ignore some of my options. Make sure that there is no site-wide configuration file (`config.site'). If configure finds one, it will print a message similar to: loading site script /usr/local/etc/config.site creating cache ./config.cache checking SICStus version... 3.8.5 [...] In this case, configure has found a `config.site' in `/usr/local/etc'. The solution is to either remove the file or to set the environment variable `CONFIG_SITE' to an empty file of your choice. For example, assuming `csh': % setenv CONFIG_SITE ./config.site % echo "# empty config.site" > ./config.site  File: faq.info, Node: Password Problems, Next: Problems Getting Started, Prev: Configure Options, Up: Installation Problems 3.5 Password Problems ===================== QUESTION: _[WINDOWS]_ When asked for the installation password, I typed it but it doesn't work. There are three pieces of information that you must not mix up. * The password to the FTP/HTTP site containing the SICStus distributions. * The password required by the installation program. * Your license code, which comes with a site name and an expiration date.  File: faq.info, Node: Problems Getting Started, Prev: Password Problems, Up: Installation Problems 3.6 Problems Getting Started ============================ QUESTION: I get the message "Failed to locate bootfile". The message "Failed to locate bootfile" means that SICStus cannot find either `spds.sav' or `sprt.sav', depending on whether you are executing a development system or a runtime system. If you are running a runtime system, you may want to read the chapter "Runtime Systems" in the User's Manual. If you want to execute runtime systems on machines that do not have SICStus installed (a.k.a. target machines), read the sections "Runtime Systems on Target Machines". If you get this message running a Development System, your installation is probably inconsistent. Reinstall SICStus and try again. QUESTION: `^D' doesn't seem to bring me back a level down after `break'. The manual assumes that `^D' is the EOF character. Under Windows, however, it's `^Z' (except when running under Emacs). In most contexts, the term `end_of_file' terminated by a full stop (`.') can be typed instead of the EOF character. QUESTION: `spld' fails with the message: 'rc' is not recognized as an internal or external command, operable program or batch file. ! Could not generate .res file for data resources. at spld.pl line 745. QUESTION: `splfr' fails with the message: 'cl' is not recognized as an internal or external command, operable program or batch file. ! Could not compile spa011160.c: No such file or directory You need to include Microsoft Visual Studio (or at least its C compiler and linker) in your `PATH' environment variable. The easiest way is to run `vcvars32.bat' from the Visual Studio distribution. To do it manually (Windows NT/2000/XP): C:\> set PATH=LOCATION OF MICROSOFT VISUAL STUDIO;%PATH%  File: faq.info, Node: Runtime Problems, Next: Generic Prolog Programming, Prev: Installation Problems, Up: Top 4 Runtime Problems ****************** * Menu: * Memory Allocation Problems:: Memory Allocation Problems  File: faq.info, Node: Memory Allocation Problems, Up: Runtime Problems 4.1 Memory Allocation Problems ============================== QUESTION: I get the message "Memory allocation failed" On 32-bit architectures, the total size of the Prolog stacks cannot exceed 256 MB. See the section "Generic limitations" in the Release Notes for additional details.  File: faq.info, Node: Generic Prolog Programming, Next: Interfacing with Other Languages, Prev: Runtime Problems, Up: Top 5 Generic Prolog Programming **************************** QUESTION: How can I split a module into several source code files? You need a main file for the module, e.g. `main.pl' and several subfiles, e.g. `sub1.pl', `sub2.pl', ... Lay out the main file as follows: :- module(MODULENAME, EXPORTLIST). ... CLAUSES/DIRECTIVES ... :- ensure_loaded(sub1). .. CLAUSES/DIRECTIVES ... :- ensure_loaded(sub2). The subfiles can contain any clauses and directives, including `ensure_loaded/1' directives, but not `module/2' directives. An alternative is to use an `include' declaration. QUESTION: How can I make the compiler abort the compilation if it encounters a syntax error? This can be done by defining `user:message_hook/3' appropriately: | ?- [user:user]. % consulting user... | message_hook(error,_,Lines) :- print_message_lines(user_error,error,Lines), abort. | ^D % consulted user in module user, 0 msec 424 bytes This will intercept any error message, print the message, and abort: | ?- [user]. % consulting user... | p p. ! Syntax error ! operator expected after expression ! in line 39 ! p ! <> ! p . % consulted user in module user, 0 msec -16 bytes % Execution aborted QUESTION: How can I write access predicates for terms without paying a performance penalty? There is support for unfolding predicates at compile time: `user:goal_expansion/3'. For example, assume that `is_ornode(X)' (`is_andnode(X)') is true if the shape (principal functor) of X is `or/2' (`and/2'). If you consult the following: :- multifile user:goal_expansion/3. :- dynamic user:goal_expansion/3. user:goal_expansion(is_ornode(Term), _, Term=or(_,_)). user:goal_expansion(is_andnode(Term), _, Term=and(_,_)). plan_tree( [N|_Rest], _GuidanceNodes, _Indent ) :- is_andnode(N). plan_tree( [N|_Rest], _GuidanceNodes, _Indent ) :- is_ornode(N). then `plan_tree/3' becomes transformed to: plan_tree([A|_], _, _) :- A=and(_,_). plan_tree([A|_], _, _) :- A=or(_,_). If you are using `fcompile/1', make sure that the definition of `user:goal_expansion/3', and anything else that the compiler needs to know, has been loaded at fcompile time. A common idiom is: | ?- ensure_loaded(SetOfFiles), fcompile(SetOfFiles). Note that `fcompile/1' is obsolescent with the introduction of partial saved-states (`.po' files). Note also that `plan_tree/3' will not be able to determinately select a matching clause based on `A', as predicates are indexed on the shape of the first argument only, which is a list in both clauses. Achieving indexing on `A' is the subject of the next question. QUESTION: Is SICStus capable of folding unifications across `:-' to determinately select a matching clause? Consider the following clauses, with the above goal expansion: plan_tree( [N|_Rest], _GuidanceNodes, _Indent ) :- is_andnode(N). plan_tree( [N|_Rest], _GuidanceNodes, _Indent ) :- is_ornode(N). In SICStus, as in most WAMs, indexing is done on the shape of the first argument. If all arguments are distinct variables A, B, C, ..., and the first goal is `A = Term', indexing will be done on the shape of `Term'. So to enable indexing on the shape of `N', you must transform the clause e.g. to: plan_tree( [N|_Rest], _GuidanceNodes, _Indent ) :- plan_tree_flat( N, _Rest, _GuidanceNodes, _Indent ). plan_tree_flat(N, _Rest, _GuidanceNodes, _Indent ) :- is_andnode(N). plan_tree_flat(N, _Rest, _GuidanceNodes, _Indent ) :- is_ornode(N). With the above goal expansion, this code will indeed index on `N'. QUESTION: Why doesn't this Fibonacci program work? Here's some code that purports to print all the Fibonacci numbers. The author of the code expected `retract/1' to backtrack forever, finding ever new `fibs/2' facts. print_fibs :- retractall(fib(_)), assert(fibs(1,1)), retract(fibs(F1,F2)), write(F1), nl, F3 is F1+F2, assert(fibs(F2,F3)), fail. If you run it: | ?- print_fibs. 1 no It doesn't work because of the semantics for calls to dynamic predicates in the presence of asserts and retracts. SICStus Prolog complies with the ISO Prolog standard in this respect. Clause 7.5.4 of the standard reads: Any change in the database that occurs as the result of executing a goal (for example, when the activator of a subgoal is a call of `assertz/1' or `retract/1') shall affect only an activation whose execution begins afterwards. The change shall not affect any activation that is currently being executed. In the above example, the `retract/1' goal is unaffected by the subsequent `assert', and only succeeds once. QUESTION: The query `X=[97|X], name(A,X).' loops. Is it a bug? It is possible, and sometimes useful, to write programs that unify a variable to a term in which that variable occurs, thus creating a cyclic term. The usual LP theory forbids the creation of cyclic terms, dictating that an occurs-check should be done each time a variable is unified with a term. Unfortunately, an occurs-check would be so expensive as to render Prolog impractical as a programming language. Thus cyclic terms may be created and may cause loops trying to print them. SICStus Prolog mitigates the problem by its ability to unify, compare assert, and copy cyclic terms without looping. The `write_term/[2,3]' built-in predicate can optionally handle cyclic terms. Unification with occurs-check is available as a built-in predicate. Predicates testing (a)cyclicity are available in a library package. Other predicates usually do not handle cyclic terms well. QUESTION: How can I have a predicate definition included when I load my code into Sicstus 3.10.x or earlier, but _not_ when I load my code into Sicstus 3.11.0 or later? You can use: | ?- prolog_flag(version,Version). plus a bit of trivial parsing to determine the version number. QUESTION: In this query, why is X not 29.51? | ?- X is 20.66 + 8.85. X = 29.509999999999998 ? yes Floats like 20.66 and 8.85 are represented in the host computer's native floating-point format (almost universally, in IEEE 754 format). They are not represented as the precise rational numbers (2066/100) and (885/100). Rounding errors are bound to pop up whenever you do floating-point arithmetic, as your query illustrates. The exact same thing happens in C. The following C program illustrates the point: the floating-point sum (20.66+8.85) differs from 29.51 in the least significant bit. #include unsigned int intone = 1; double d1 = 20.66; double d2 = 8.85; double d3 = 29.51; main() { double d4 = d1+d2; int mshalf = ((unsigned short *)&intone)[0]; int lshalf = 1-mshalf; printf("20.66 + 8.85 with 15 decimals, and in hex:\n"); printf("%.15f %0x%0x\n", d4, ((long *)&d4)[mshalf], ((long *)&d4)[lshalf]); printf("29.51 with 15 decimals, and in hex:\n"); printf("%.15f %0x%0x\n", d3, ((long *)&d3)[mshalf], ((long *)&d3)[lshalf]); exit(0); }  File: faq.info, Node: Interfacing with Other Languages, Next: Standard Prolog Compliance, Prev: Generic Prolog Programming, Up: Top 6 Interfacing with Other Languages ********************************** * Menu: * Interfacing with UNIX:: Interfacing with UNIX * Interfacing with C++:: Interfacing with C++ * Interfacing with Visual Basic:: Interfacing with Visual Basic * Interfacing with Tcl/Tk:: Interfacing with Tcl/Tk * Interfacing with Java:: Interfacing with Java  File: faq.info, Node: Interfacing with UNIX, Next: Interfacing with C++, Up: Interfacing with Other Languages 6.1 Interfacing with UNIX ========================= QUESTION: _[UNIX]_ How can I turn a Prolog source file into a UNIX script, to be invoked from the command line or from a Web application, for example? Wrap the file into an executable Shell script that simply invokes SICStus. Informational messages can be filtered out by redirecting `stderr' to `/dev/null'. For example: #!/bin/sh exec sicstus 2> /dev/null -f -a "$@" <.so'). This is the same as the value of the `--prefix' options specified to Tcl/Tk's `configure'-script. QUESTION: My Tcl and Tk installation are not in the same directory. What should I do? Unfortunately, there is no solution to this yet. You need to install Tcl/Tk in the same directory in order for `InstallSICStus' to find them.  File: faq.info, Node: Configuring the Tcl/Tk Library Module under Windows, Next: Compiling SICStus with Tcl/Tk Support, Prev: Installing the Tcl/Tk Library Module under UNIX, Up: Interfacing with Tcl/Tk 6.4.2 Configuring the Tcl/Tk Library Module under Windows --------------------------------------------------------- QUESTION: I need to use a different Tcl/Tk version from the one SICStus is compiled against. How do I do? The symptom of this is that Windows complains about not finding `tcl.dll'. See the release notes for what version of Tcl/Tk was used to build SICStus. If you want to use another Tcl/Tk version, you need to recompile `library(tcltk)'. You can do this by following these steps: (Please do not embark on this unless you are fairly familiar with command-prompts and compilation procedures). 1. You need MSVC version 6.0 or later. 5.x or 4.x might work but have not been tested. 2. Build a new Tcl/Tk foreign resource (assuming Bash/Cygwin): $ cd library/x86-win32-nt-4 $ mkdir tcltk_new $ cd tcltk_new $ splfr --cflag=-Ic:/path/to/Tcl/include ../../tcltk/*.c ../../tcltk.pl c:/path/to/Tcl/lib/tcl84.lib c:/path/to/Tcl/lib/tk84.lib $ cp tcltk.dll ../tcltk.dll If you do not have a shell that expands "*.c", you need to replace "../../tcltk/*.c" with the name of all C source files in `../../tcltk'. Also, don't forget to adjust the actual paths to your Tcl/Tk installation directory. The following sample session shows how it may look: $ splfr --cflag=-Ih:/MS_Windows_2000/Tcl/include ../../tcltk/*.c ../../tcltk.pl h:/MS_Windows_2000/Tcl/lib/tcl84.lib h:/MS_Windows_2000/Tcl/lib/tk84.lib SICStus 3.12.11 ... Licensed to SICS % tcltk_glue_1084_1044046414.c generated, 20 msec % tcltk_glue.h generated, 20 msec tcl.c ../../tcltk/tcl.c(223) : warning C4090: 'function' : different 'const' qualifiers ../../tcltk/tcl.c(223) : warning C4024: 'sptcl_save_error' : different types for formal and actual parameter 2 ../../tcltk/tcl.c(323) : warning C4090: 'function' : different 'const' qualifiers ../../tcltk/tcl.c(323) : warning C4024: 'sptcl_save_error' : different types for formal and actual parameter 2 ../../tcltk/tcl.c(374) : warning C4090: 'function' : different 'const' qualifiers ../../tcltk/tcl.c(374) : warning C4024: 'sptcl_save_error' : different types for formal and actual parameter 2 tk.c ../../tcltk/tk.c(134) : warning C4090: 'function' : different 'const' qualifiers ../../tcltk/tk.c(134) : warning C4024: 'sptcl_save_error' : different types for formal and actual parameter 2 ../../tcltk/tk.c(162) : warning C4090: 'function' : different 'const' qualifiers ../../tcltk/tk.c(162) : warning C4024: 'sptcl_save_error' : different types for formal and actual parameter 2 tkappini.c tkterm.c util.c tcltk_glue_1084_1044046414.c Creating library dummy.lib and object dummy.exp $ cp tcltk.dll ../tcltk.dll 3. Test your new resource: $ sicstus -i SICStus 3.12.11 ... Licensed to SICS | ?- use_module(library(tcltk)). % loading c:/program files/sicstus prolog 3.10.0/library/tcltk.po... % module tcltk imported into user % loading foreign resource c:/program files/sicstus prolog 3.10.0/library/x86-win32-nt-4/tcltk.dll in module tcltk % loaded c:/program files/sicstus prolog 3.10.0/library/tcltk.po in module tcltk, 10 msec 14744 bytes  File: faq.info, Node: Compiling SICStus with Tcl/Tk Support, Next: Generic Tcl/Tk Problems, Prev: Configuring the Tcl/Tk Library Module under Windows, Up: Interfacing with Tcl/Tk 6.4.3 Compiling SICStus with Tcl/Tk Support ------------------------------------------- *Please note*: This section is only relevant when compiling source distributions with support for Tcl/Tk. Most UNIX machines today have Tcl/Tk preinstalled. This reduces the risk of installation difficulties since the linker and the runtime linker usually finds Tcl/Tk in its default paths. Most other installation and/or configuration problems related to Tcl/Tk are caused by improper installation or installation in a path where the linker and runtime linker cannot find Tcl/Tk. Tcl/Tk is configured for installation similar to SICStus; by the use of a `configure' script generated by GNU Autoconf. The installation directory is specified by the `--prefix' option. The value of this option is referred to as the INSTALLATION-DIR below. QUESTION: The configure-script complains that it cannot find `Tcl_Init' and/or `Tk_Init'. What should I do? The following message from `configure' indicates that it could not link a test program with the Tcl/Tk libraries. ... checking for Tcl_Init in -ltcl8.3... no checking for Tk_Init in -ltk8.3... no ... The common cause of this is that the compiler cannot find `-ltcl8.3' and/or `-ltk8.3' (or whichever version it tries to find), usually because Tcl/Tk has been installed in a non-standard directory (i.e. different from `/usr/lib', `/usr/local/lib', etc.). If you've installed Tcl/Tk in INSTALLATION-DIR, specify the following to `configure': % ./configure --with-tcltk=INSTALLATION-DIR MORE OPTIONS The problem can occur even if the Tcl/Tk shared libraries can be found, but the link-phase failed due to other reasons. If this occurs, it is often useful to look in `config.log', where output from compilation stages etc. is logged. QUESTION: I've installed Tcl and Tk in different directories. What do I do? You can use: % ./configure --with-tcl=TCLINSTALLPATH --with-tk=TKINSTALLPATH QUESTION: There are no shared Tcl/Tk libraries. What has happened? You need to specify `--enable-shared' when configuring Tcl/Tk. This is _not_ enabled by default.  File: faq.info, Node: Generic Tcl/Tk Problems, Prev: Compiling SICStus with Tcl/Tk Support, Up: Interfacing with Tcl/Tk 6.4.4 Generic Tcl/Tk Problems ----------------------------- QUESTION: I get the message "tcl_new/1 - Can't find a usable init.tcl in the following directories..." This means that Tcl/Tk can't find its libraries of tcl-code needed for operation. This occurs when Tcl/Tk has been built but not properly installed. You have the option of stating the location of the libraries by means of the environment variables `TCL_LIBRARY' and `TK_LIBRARY'. See also the Tcl/Tk documentation. Another reason for this could be if you are not using SICStus 3.8.1 or later. The original SICStus 3.8 did not initialize Tcl/Tk correctly. QUESTION: I get the message "tcl_eval/3 - can't read `var(Tree)': no such variable" This message can appear in Tcl code trying to access Prolog variables. Example: tk_test :- tk_new([],Interp), tcl_eval(Interp, ' global var set Tree [] set Children [] set GrandChildren [] prolog {get_tree(Tree), make_children(Tree, Children), make_grandChildren(Tree, Children, GrandChildren)} puts "$var(Tree) $var(Children) $var(GrandChildren) " ', _), tk_main_loop, tcl_delete(Interp). The problem is that the argument to the `prolog' function is just a string that is interpreted by Prolog as a goal. There is no connection between the Prolog variables `Tree', `Children' and `GrandChildren' and the Tcl-variables with the same name. After returning from `prolog', the values that the Prolog variables have been bound to are assigned to the array variable `prolog_variables'. So replacing `$var' in your example with `$prolog_variables', makes it work.  File: faq.info, Node: Interfacing with Java, Prev: Interfacing with Tcl/Tk, Up: Interfacing with Other Languages 6.5 Interfacing with Java ========================= QUESTION: I'm having basic trouble in getting Java to work. First try to get a simple "Hello world" program to work that does _not_ use Jasper. A large portion of the support questions we get are unrelated to the SICStus Java interface. Once you can compile and run your own Java classes it should be relatively easy to get Jasper to work. Read the Release Notes and the User's Manual and the section in them related to Jasper. QUESTION: I want to use Jasper from an applet, but my browser won't let me. Jasper is built as a layer on top of SICStus' C-Prolog interface and hence Jasper needs to be able to call methods declared as NATIVE (i.e., C functions). For security reasons, this is prohibited in applets. This is a serious restriction, and future versions of Jasper will most likely allow connecting to the Prolog engine via sockets. In the interim, there are some examples on this at the Don't Panic page (http://www.sics.se/isl/sicstuswww/site/dontpanic.html) at `http://www.sics.se/sicstus/'. QUESTION: I get the message "Failed to locate bootfile" when running `java CLASSUSINGJASPER'. The answer to this (and related questions) can be found in the Jasper chapter of the Release Notes, section "Getting Started". QUESTION: My first test of Java calling SICStus under MacOS X (i.e. calling `se.sics.jasper.SICStus') failed with the following message. Yes, I set the `java.library.path'. Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/ptollinger/bin/powerpc-apple-darwin/lib/libspnative.jnilib: at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1560) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1485) at java.lang.Runtime.loadLibrary0(Runtime.java:788) at java.lang.System.loadLibrary(System.java:834) at se.sics.jasper.SICStus.loadNativeCode(SICStus.java:491) at se.sics.jasper.SICStus.initSICStus(SICStus.java:749) at se.sics.jasper.SICStus.(SICStus.java:811) at se.sics.jasper.SICStus.main(SICStus.java:439) You need to set `DYLD_LIBRARY_PATH' to include the SICStus runtime library: bash> export DYLD_LIBRARY_PATH=LOCATION OF `LIBSPRT312.DYLIB'  File: faq.info, Node: Standard Prolog Compliance, Next: Miscellaneous, Prev: Interfacing with Other Languages, Up: Top 7 Standard Prolog Compliance **************************** SICStus 3.8 supports standard Prolog, adhering to the International Standard ISO/IEC 13211-1 (PROLOG: Part 1--General Core) (`http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+13211%2D1%2D1995'). At the same time it also supports programs written in earlier versions of SICStus. This is achieved by introducing two execution modes `iso' and `sicstus'. Users can change between the modes using the Prolog flag `language'. Main issues: * The `sicstus' execution mode is practically identical to 3.7.1, except for minor changes in error term format. * The `iso' mode is fully compliant with ISO standard, but no strict conformance mode is provided. * The dual mode system supports the gradual transition from legacy SICStus code to ISO Prolog compliant programs. * Note that the built-in predicates, functions and Prolog flags, required by the ISO standard, are also available in `sicstus' execution mode, unless they conflict with existing SICStus predicates or functions. This expansion of the language carries a remote risk of name clashes with user code.  File: faq.info, Node: Miscellaneous, Prev: Standard Prolog Compliance, Up: Top 8 Miscellaneous *************** QUESTION: _[WINDOWS]_ How do I save a transcript of my Prolog session under Windows? As of 3.8.3 the windowed executable (`spwin') can save a transcript of the interaction with the Prolog top-level. The command is under the `File' menu. You may wish to increase the number of `save lines' in the `Windows Settings' (under the `Settings' menu). QUESTION: _[WINDOWS]_ How do increase the number of history lines used by the windowed executable (`spwin')? *Note The Console Window: (relnotes)The Console Window.  Tag Table: Node: Top247 Node: About This Document883 Node: Introduction1779 Node: Installation Problems5778 Node: Windows Installer Problems6331 Node: Corrupted Binary Files6918 Node: Linux C Libraries7393 Node: Configure Options8135 Node: Password Problems9434 Node: Problems Getting Started10009 Node: Runtime Problems11937 Node: Memory Allocation Problems12162 Node: Generic Prolog Programming12533 Node: Interfacing with Other Languages20169 Node: Interfacing with UNIX20647 Node: Interfacing with C++21709 Node: Interfacing with Visual Basic22178 Node: Interfacing with Tcl/Tk22442 Node: Installing the Tcl/Tk Library Module under UNIX23006 Node: Configuring the Tcl/Tk Library Module under Windows24100 Node: Compiling SICStus with Tcl/Tk Support27830 Node: Generic Tcl/Tk Problems30198 Node: Interfacing with Java32172 Node: Standard Prolog Compliance34744 Node: Miscellaneous36062  End Tag Table