Search Results

Search found 221 results on 9 pages for 'swi prolog'.

Page 2/9 | < Previous Page | 1 2 3 4 5 6 7 8 9  | Next Page >

  • Generalizing Fibonacci sequence with SICStus Prolog

    - by Christophe Herreman
    I'm trying to find a solution for a query on a generalized Fibonacci sequence (GFS). The query is: are there any GFS that have 885 as their 12th number? The initial 2 numbers may be restricted between 1 and 10. I already found the solution to find the Nth number in a sequence that starts at (1, 1) in which I explicitly define the initial numbers. Here is what I have for this: fib(1, 1). fib(2, 1). fib(N, X) :- N #> 1, Nmin1 #= N - 1, Nmin2 #= N - 2, fib(Nmin1, Xmin1), fib(Nmin2, Xmin2), X #= Xmin1 + Xmin2. For the query mentioned I thought the following would do the trick, in which I reuse the fib method without defining the initial numbers explicitly since this now needs to be done dynamically: fib2 :- X1 in 1..10, X2 in 1..10, fib(1, X1), fib(2, X2), fib(12, 885). ... but this does not seem to work. Is it not possible this way to define the initial numbers, or am I doing something terribly wrong? I'm not asking for the solution, but any advice that could help me solve this would be greatly appreciated.

    Read the article

  • plld Prolog C++

    - by H.J. Miri
    I have a large Prolog program with lots of predicates. I need to connect to this Prolog code from C++ (VS2008) to obtain certain query results. So I am not trying to embed Prolog in C++ as a logicasl engine, but for my C++ program to connect to my Prolog code, consult (compile) it, obtain query results, and pass them back to C++. Running the following command at the VS2008 Command Prompt generates so many errors: plld -o myprog.exe mycpp.cpp mypl.pl Is there any way I can get my C++ program to consult my Prolog program, by including a command or makefile, etc...? I am aware that if you use VS2008, you are better off not using plld, so I am trying to include everything in one master C++ program, then press F5 to build and compile, and then call Prolog, then C++, and so on... Cheers,

    Read the article

  • Prolog - How do you distinguish between just a string, and a variable? [closed]

    - by Mr Prolog
    When you are querying a Prolog database, often you will use terms that start with an uppercase letter as your variables. However, let's say that one of the constraints on your query is that a person's location must be "Dallas", and you want to query all the information in the database who meet those specifications. How would do you correctly make sure that Dallas is not interpreted as a variable to store a value in, and is interpreted as a string instead, for usage as a constraint on the query?

    Read the article

  • Mac OS X: Trying to install prolog using fink

    - by sixtyfootersdude
    I am trying to install prolog on Mac OS X 10.4.11. I just downloaded fink because I think that that should help me and I am trying to get either: Package swi-prolog-5.8.1-2 or Package gprolog-1.3.1-1 But I am not having any luck. Here is what I was doing: % fink install swi-prolog-5.8.1-2 Information about 1723 packages read in 0 seconds. Failed: no package found for specification 'swi-prolog-5.8.1-2'! % Question 1: Are these what I want to download? Question 2: Why isn't fink working?

    Read the article

  • SWI-Prolog as an embedded application in VS2008 C++

    - by H.J. Miri
    I have a C++ application (prog.sln) which is my main program and I want to use Prolog as an embedded logic server (hanoi.pl) int main(int argc, char** argv) { putenv( "SWI_HOME_DIR=C:\\Program Files\\pl" ); argv[0] = "libpl.dll"; argv[1] = "-x"; argv[2] = "hanoi.pl"; argv[3] = NULL; PL_initialise(argc, argv); { fid_t fid = PL_open_foreign_frame(); predicate_t pred = PL_predicate( "hanoi", 1, "user" ); int rval = PL_call_predicate( NULL, PL_Q_NORMAL, pred, 3 ); qid_t qid = PL_open_query( NULL, PL_Q_NORMAL, pred, 3 ); while ( PL_next_solution(qid) ) return qid; PL_close_query(qid); PL_close_foreign_frame(fid); system("PAUSE"); } return 1; system("PAUSE"); } Here is my Prolog source code: :- use_module( library(shlib) ). hanoi( N ):- move( N, left, center, right ). move( 0, _, _, _ ):- !. move( N, A, B, C ):- M is N-1, move( M, A, C, B ), inform( A, B ), move( M, C, B, A ). inform( X, Y ):- write( 'move a disk from ' ), write( X ), write( ' to ' ), write( Y ), nl. I type at the command: plld -o hanoi prog.sln hanoi.pl But it doesn't compile. When I run my C++ app, it says: Undefined procedure: hanoi/1 What is missing/wrong in my code or at the prompt that prevents my C++ app from consulting Prolog? Appreciate any help/pointer.

    Read the article

  • Prolog Beginner: How to unify with arithmentic comparison operators or how to get a set var to range

    - by sixtyfootersdude
    I am new to prolog. I need to write an integer adder that will add numbers between 0-9 to other numbers 0-9 and produce a solution 0-18. This is what I want to do: % sudo code add(in1, in2, out) :- in1 < 10, in2 < 10, out < 18. I would like to be able to call it like this: To Check if it is a valid addition: ?- add(1,2,3). true ?- add(1,2,4). false With one missing variable: ?- add(X,2,3). 1 ?- add(1,4,X). 5 With multiple missing variables: ?-add(X,Y,Z). % Some output that would make sense. Some examples could be: X=1, Y=1, Z=2 ; X=2, Y=1, Z=3 ...... I realize that this is probably a pretty simplistic question and it is probably very straightforward. However cording to the prolog tutorial I am using: "Unlike unification Arithmetic Comparison Operators operators cannot be used to give values to a variable. The can only be evaluated when every term on each side have been instantiated."

    Read the article

  • Prolog Beginner: How to unify with arithmentic cmparison operators or how to get a set var to range

    - by sixtyfootersdude
    I am new to prolog. I need to write an integer adder that will add numbers between 0-9 to other numbers 0-9 and produce a solution 0-18. This is what I want to do: add(in1, in2, out) :- in1 < 10, in2 < 10, out < 18. I would like to be able to call it like this: To Check if it is a valid addition: ?- add(1,2,3). true ?- add(1,2,4). false With one missing variable: ?- add(X,2,3). 1 ?- add(1,4,X). 5 With multiple missing variables: ?-add(X,Y,Z). % Some output that would make sense. Some examples could be: X=1, Y=1, Z=2 ; X=2, Y=1, Z=3 ...... I realize that this is probably a pretty simplistic question and it is probably very straightforward. However cording to the prolog tutorial I am using: "Unlike unification Arithmetic Comparison Operators operators cannot be used to give values to a variable. The can only be evaluated when every term on each side have been instantiated."

    Read the article

  • Simple prolog program. Getting error: >/2: Arguments are not sufficiently instantiated

    - by user1279812
    I made a prolog program posAt(List1,P,List2) that tests whether the element at position P of List1 and List2 are equal: posAt([X|Z],1,[Y|W]) :- X=Y. posAt([Z|X],K,[W|Y]) :- K1, Kr is K - 1, posAt(X,Kr,Y). When testing: ?- posAt([1,2,3],X,[a,2,b]). I expected an output of X=2 but instead I got the following error: ERROR: /2: Arguments are not sufficiently instantiated Why am I getting this error?

    Read the article

  • How to avoid using the plld.exe utility in VS2008 (for linking C++ and Prolog codes)

    - by Joshua Green
    Here is my code in its entirety: Trying "listing." at the Prolog prompt that pops up when I run the program confirms that my Prolog source code has been loaded (consulted). #include <iostream> #include <fstream> #include <string> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <stdafx.h> using namespace std; #include "Windows.h" #include "ctype.h" #include "SWI-cpp.h" #include "SWI-Prolog.h" #include "SWI-Stream.h" int main(int argc, char** argv) { argc = 4; argv[0] = "libpl.dll"; argv[1] = "-G32m"; argv[2] = "-L32m"; argv[3] = "-T32m"; PL_initialise(argc, argv); if ( !PL_initialise(argc, argv) ) PL_halt(1); PlCall( "consult(swi('plwin.rc'))" ); PlCall( "consult('hello.pl')" ); PL_halt( PL_toplevel() ? 0 : 1 ); } So this is how to load a Prolog source code (hello.pl) at run time into VS2008 without having to use plld at the VS command prompt.

    Read the article

  • Prolog Beginner: How to make unique values for each Variable in a predicate.

    - by sixtyfootersdude
    I have a prolog predicate: DoStuff( [A|B] ) :- <Stuff that I do> ... </Stuff that I do> It is all done except it needs to do return unique values. Ie if you do: ?- DoStuff(A,B,C,D). it should return: A=1; B=2; C=3; D=4. (Or something similar, the key point is that all of the values are unique). However you should be able to do this too: ?- DoStuff(A,A,B,B). And still get a valid answer. Ie: A=1; B=2. How can I do this? What I was planning on doing was something like this: DoStuff( [A|B] ) :- <Stuff that I do> ... </Stuff that I do> unique([A|B]). unique([]). unique([A|B]) :- A is not B. However I think that will make DoStuff([A,A,B]) not work because not all values will be unique.

    Read the article

  • Prolog Beginner: Trivial Example that I cannot get to work.

    - by sixtyfootersdude
    I have some prolog. The lessThanTen and example predicates work as expected however the exam predicate does not work. lessThanTen(9). lessThanTen(8). lessThanTen(7). lessThanTen(6). lessThanTen(5). lessThanTen(4). lessThanTen(3). lessThanTen(2). lessThanTen(1). lessThanTen(0). example(X) :- X is 5. exam(X) :- X is lessThanTen(Y). Here is the output: % swipl ... ?- [addv1]. Warning: /.../addv1.pl:17: Singleton variables: [Y] % addv1 compiled 0.00 sec, 1,484 bytes true. ?- lessThanTen(X). X = 9 ; X = 8 ; X = 7 ; ... ?- example(X). X = 5. ?- exam(X). ERROR: is/2: Arithmetic: `lessThanTen/1' is not a function ?- exam(5). ERROR: is/2: Arithmetic: `lessThanTen/1' is not a function I am thinking that the warning I am getting is pretty key.

    Read the article

  • Simple question - XSB Prolog

    - by KP65
    Hello! I'm diving into the world of prolog headfirst but I seem to have hit shallow water! I'm looking at database manipulation in prolog with regards to this tutorial:Learn Prolog Now! It states that I can see my database by entering listing So i tried it and it should basically output everything in my .P file(facts, rules), but this is what i get, here are my sequence of commands: ? consult('D:\Prolog\testfile.P'). [testfile.P loaded] ? listing. library_directory(C:blahblahpathtoXSB) library_directory(C:blahblahXSBpath) {this is listed around 5 times)} shouldn't this command display what is in testfile.P, according to the tutorial? also, after consult testfile.P i should be ableto use assert to add more facts but it doesnt actually change anything in the testfile.P..? any ideas

    Read the article

  • Developing Prolog on Linux

    - by Andrew Bolster
    Dont know whether this belongs in SO or SF I am taking an AI course this semester and it requires fairly heavy use of Prolog. I've dealt with using the provided windows IDE under WINE on the laptop and within VM on the desktop. It all seems too awkward to me, so does anyone know what prolog linux IDE's are out there? (And how to set up prolog nativly under linux)

    Read the article

  • Reversible numerical calculations in Prolog

    - by user8472
    While reading SICP I came across logic programming chapter 4.4. Then I started looking into the Prolog programming language and tried to understand some simple assignments in Prolog. I found that Prolog seems to have troubles with numerical calculations. Here is the computation of a factorial in standard Prolog: f(0, 1). f(A, B) :- A > 0, C is A-1, f(C, D), B is A*D. The issues I find is that I need to introduce two auxiliary variables (C and D), a new syntax (is) and that the problem is non-reversible (i.e., f(5,X) works as expected, but f(X,120) does not). Naively, I expect that at the very least C is A-1, f(C, D) above may be replaced by f(A-1,D), but even that does not work. My question is: Why do I need to do this extra "stuff" in numerical calculations but not in other queries? I do understand (and SICP is quite clear about it) that in general information on "what to do" is insufficient to answer the question of "how to do it". So the declarative knowledge in (at least some) math problems is insufficient to actually solve these problems. But that begs the next question: How does this extra "stuff" in Prolog help me to restrict the formulation to just those problems where "what to do" is sufficient to answer "how to do it"?

    Read the article

  • Integrating Prolog with C#

    - by TK
    Does anyone know of a nice (and preferably free) way to integrate Prolog and C#? Im looking to create a Prolog dll or similar to call from my managed code, and retrieve an answer once all the processing has been complete. Im looking for it to be predominantly one sided (c# calls Prolog). I have seen this question which talks about Prologs real world usage but I was wondering if anyone had either any experience with c# & Prolog? or a nice tutorial/article?

    Read the article

  • Numerical calculations in Prolog

    - by user8472
    While reading SICP I came across logic programming chapter 4.4. Then I started looking into the Prolog programming language and tried to understand some simple assignments in Prolog. I found that Prolog seems to have troubles with numerical calculations. Here is the computation of a factorial in standard Prolog: f(0, 1). f(A, B) :- A > 0, C is A-1, f(C, D), B is A*D. The issues I find is that I need to introduce two auxiliary variables (C and D), a new syntax (is) and that the problem is non-reversible (i.e., f(5,X) works as expected, but f(X,120) does not). Naively, I expect that at the very least C is A-1, f(C, D) above may be replaced by f(A-1,D), but even that does not work. My question is: Why do I need to do this extra "stuff" in numerical calculations but not in other queries? I do understand (and SICP is quite clear about it) that in general information on "what to do" is insufficient to answer the question of "how to do it". So the declarative knowledge in (at least some) math problems is insufficient to actually solve these problems. But that begs the next question: How does this extra "stuff" in Prolog help me to restrict the formulation to just those problems where "what to do" is sufficient to answer "how to do it"?

    Read the article

  • Prolog returns Out = _G431 when it suppose to return a list of lists

    - by Mandah
    createSchedule([[math109]], fall, Out). [[cs485, cs485], [cs355, cs355, cs462, cs462, cs462], [cs345, cs345, cs352, cs352, cs352, cs362, cs362, cs362, cs396, cs396, cs396], [cs330, cs330, cs330], [cs255, cs255, cs255, cs268, cs268], [math114, cs245, cs245], [math112, cs145, cs146], [math109]] Out = _G431 this is what prolog returns and the list of lists is shown by using write(Out) in prolog. Any ideas why it is showing this? Thanks

    Read the article

  • Consulting a Prolog Source Code from within a VS2008 Solution File

    - by Joshua Green
    I have a Prolog file (Hanoi.pl) containing the code for solving the Hanoi Towers puzzle: hanoi( N ):- move( N, left, middle, right ). move( 0, _, _, _ ):- !. move( N, A, B, C ):- M is N-1, move( M, A, C, B ), inform( A, B ), move( M, C, B, A ). inform( X, Y ):- write( 'move a disk from ' ), write( X ), write( ' to ' ), writeln( Y ). I also have a C++ file written in VS2008 IDE: #include <iostream> #include <string> #include <stdio.h> #include <stdlib.h> using namespace std; #include "SWI-cpp.h" #include "SWI-Prolog.h" predicate_t phanoi; term_t t0; int main(int argc, char** argv) { long n = 5; int rval; if ( !PL_initialise(1, argv) ) PL_halt(1); PL_put_integer( t0, n ); phanoi = PL_predicate( "hanoi", 1, NULL ); rval = PL_call_predicate( NULL, PL_Q_NORMAL, phanoi, t0 ); system( "PAUSE" ); } How can I consult my Prolog source code (Hanoi.pl) from within my C++ code? Not from the Command Prompt - from the code, something like include or consult or compile? It is located in the same folder as my cpp file. Thanks,

    Read the article

  • Embedded Prolog Interpreter/Compiler for Java

    - by Sami
    I'm working on an application in Java, that needs to do some complex logic rule deductions as part of its functionality. I'd like to code my logic deductions in Prolog or some other logic/constraint programming language, instead of Java, as I believe the resulting code will be significantly simpler and more maintainable. I Googled for embedded Java implementations on Prolog, and found number of them, each with very little documentation. My (modest) selection criteria are: should be embeddable in Java (e.g. can be bundled up with my java package instead of requiring any native installations on external programs) simple interface to use from Java (for initiating deductions, inspecting results, and adding rules) come with at least a few examples on how to use it doesn't necessarely have to be Prolog, but other logic/constraint programming languages with the above criteria would suit my needs, too. What choices do I have and what are their advantages and disadvantages?

    Read the article

< Previous Page | 1 2 3 4 5 6 7 8 9  | Next Page >