From 3ac73c8881fd209c4ba3d4d78eb6d66ecefef054 Mon Sep 17 00:00:00 2001 From: pmoura Date: Tue, 7 Nov 2006 18:47:24 +0000 Subject: [PATCH] Logtalk 2.28.2 files. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1713 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- Logtalk/examples/threads/NOTES.txt | 13 + Logtalk/examples/threads/atomic/NOTES.txt | 19 + Logtalk/examples/threads/atomic/SCRIPT.txt | 71 ++++ Logtalk/examples/threads/atomic/atomic.lgt | 121 ++++++ Logtalk/examples/threads/atomic/loader.lgt | 13 + Logtalk/examples/threads/birthdays/NOTES.txt | 12 + Logtalk/examples/threads/birthdays/SCRIPT.txt | 52 +++ .../examples/threads/birthdays/birthdays.lgt | 90 ++++ Logtalk/examples/threads/birthdays/loader.lgt | 13 + Logtalk/examples/threads/functions/NOTES.txt | 14 + Logtalk/examples/threads/functions/SCRIPT.txt | 65 +++ .../examples/threads/functions/functions.lgt | 268 ++++++++++++ Logtalk/examples/threads/functions/loader.lgt | 13 + Logtalk/examples/threads/nondet/NOTES.txt | 15 + Logtalk/examples/threads/nondet/SCRIPT.txt | 29 ++ Logtalk/examples/threads/nondet/loader.lgt | 13 + Logtalk/examples/threads/nondet/nondet.lgt | 12 + Logtalk/examples/threads/primes/NOTES.txt | 15 + Logtalk/examples/threads/primes/SCRIPT.txt | 31 ++ Logtalk/examples/threads/primes/loader.lgt | 13 + Logtalk/examples/threads/primes/primes.lgt | 62 +++ Logtalk/wenv/context/Logtalk.chl | 57 +++ Logtalk/wenv/context/NOTES.txt | 20 + Logtalk/wenv/npp/NOTES.txt | 24 ++ Logtalk/wenv/npp/logtalk.api | 138 ++++++ Logtalk/wenv/npp/userDefineLang.xml | 36 ++ Logtalk/wenv/smultron/NOTES.txt | 29 ++ Logtalk/wenv/smultron/SyntaxDefinitions.plist | 14 + Logtalk/wenv/smultron/logtalk.plist | 183 ++++++++ Logtalk/wenv/superedi/Logtalk.col | 44 ++ Logtalk/wenv/superedi/Logtalk.syn | 322 ++++++++++++++ Logtalk/wenv/superedi/NOTES.txt | 28 ++ Logtalk/wenv/textwrangler/NOTES.txt | 9 + Logtalk/wenv/vim/completion/logtalk.dict | 138 ++++++ Logtalk/wenv/vim/indent/logtalk.vim | 61 +++ Logtalk/wenv/vim/syntax/logtalk.vim | 397 ++++++++++++++++++ 36 files changed, 2454 insertions(+) create mode 100644 Logtalk/examples/threads/NOTES.txt create mode 100644 Logtalk/examples/threads/atomic/NOTES.txt create mode 100644 Logtalk/examples/threads/atomic/SCRIPT.txt create mode 100644 Logtalk/examples/threads/atomic/atomic.lgt create mode 100644 Logtalk/examples/threads/atomic/loader.lgt create mode 100644 Logtalk/examples/threads/birthdays/NOTES.txt create mode 100644 Logtalk/examples/threads/birthdays/SCRIPT.txt create mode 100644 Logtalk/examples/threads/birthdays/birthdays.lgt create mode 100644 Logtalk/examples/threads/birthdays/loader.lgt create mode 100644 Logtalk/examples/threads/functions/NOTES.txt create mode 100644 Logtalk/examples/threads/functions/SCRIPT.txt create mode 100644 Logtalk/examples/threads/functions/functions.lgt create mode 100644 Logtalk/examples/threads/functions/loader.lgt create mode 100644 Logtalk/examples/threads/nondet/NOTES.txt create mode 100644 Logtalk/examples/threads/nondet/SCRIPT.txt create mode 100644 Logtalk/examples/threads/nondet/loader.lgt create mode 100644 Logtalk/examples/threads/nondet/nondet.lgt create mode 100644 Logtalk/examples/threads/primes/NOTES.txt create mode 100644 Logtalk/examples/threads/primes/SCRIPT.txt create mode 100644 Logtalk/examples/threads/primes/loader.lgt create mode 100644 Logtalk/examples/threads/primes/primes.lgt create mode 100644 Logtalk/wenv/context/Logtalk.chl create mode 100644 Logtalk/wenv/context/NOTES.txt create mode 100644 Logtalk/wenv/npp/NOTES.txt create mode 100644 Logtalk/wenv/npp/logtalk.api create mode 100644 Logtalk/wenv/npp/userDefineLang.xml create mode 100644 Logtalk/wenv/smultron/NOTES.txt create mode 100644 Logtalk/wenv/smultron/SyntaxDefinitions.plist create mode 100644 Logtalk/wenv/smultron/logtalk.plist create mode 100644 Logtalk/wenv/superedi/Logtalk.col create mode 100644 Logtalk/wenv/superedi/Logtalk.syn create mode 100644 Logtalk/wenv/superedi/NOTES.txt create mode 100644 Logtalk/wenv/textwrangler/NOTES.txt create mode 100644 Logtalk/wenv/vim/completion/logtalk.dict create mode 100644 Logtalk/wenv/vim/indent/logtalk.vim create mode 100644 Logtalk/wenv/vim/syntax/logtalk.vim diff --git a/Logtalk/examples/threads/NOTES.txt b/Logtalk/examples/threads/NOTES.txt new file mode 100644 index 000000000..e55213702 --- /dev/null +++ b/Logtalk/examples/threads/NOTES.txt @@ -0,0 +1,13 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +This folder contains some examples of multi-threading programming. +Multi-threading programming is only supported on some Prolog compilers. +Currently this includes SWI-Prolog and YAP. Moreover, multi-threading +is turned off by default. In order to run the examples, you will need +to first turn on multi-threading support on the Prolog config files. diff --git a/Logtalk/examples/threads/atomic/NOTES.txt b/Logtalk/examples/threads/atomic/NOTES.txt new file mode 100644 index 000000000..addf85e1e --- /dev/null +++ b/Logtalk/examples/threads/atomic/NOTES.txt @@ -0,0 +1,19 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +To load this example and for sample queries, please see the SCRIPT file. + +This folder contains a simple multi-threading example illustrating the +use of the "atomic" option on threaded_call/2 calls to cope with methods +that have side-effects. + +The object defined in the example source file, "atomic.lgt", defines a +predicate named waste_time/0 that is used to delay the execuion of goals +in order to better illustrate the semantics of the "atomic" option. This +predicate uses a counter that you might need to adjust, depending on your +Prolog compiler and computer performance. diff --git a/Logtalk/examples/threads/atomic/SCRIPT.txt b/Logtalk/examples/threads/atomic/SCRIPT.txt new file mode 100644 index 000000000..3ffcef73c --- /dev/null +++ b/Logtalk/examples/threads/atomic/SCRIPT.txt @@ -0,0 +1,71 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +% start by loading the loading the example: + +| ?- logtalk_load(atomic(loader)). +... + + +% send three asynchronous messages whose corresponding methods perform output operations: + +| ?- threaded_call(nasty1::io(alpha), [noreply]), threaded_call(nasty1::io(digit), [noreply]), threaded_call(nasty1::io(alpha), [noreply]). + +a0ab1bc2c3ddefef45gg6hh7ii8jkjk9 +llmmnnopopqqrrsstztzyyxxwwuv +uv + +Yes + + +% the same three asynchronous messages but making them atomic for the receiver object: + +| ?- threaded_call(nasty1::io(alpha), [atomic, noreply]), threaded_call(nasty1::io(digit), [atomic, noreply]), threaded_call(nasty1::io(alpha), [atomic, noreply]). + +abcdefghijklmnopqrstzyxwuv +0123456789 +abcdefghijklmnopqrstzyxwuv + +Yes + + +% send three asynchronous messages whose corresponding methods perform database updates +% (this may or may not work, most likely will throw an exception): + +| ?- threaded_call(nasty1::update_db(_), [noreply]), threaded_call(nasty1::update_db(_), [noreply]), threaded_call(nasty1::update_db(_), [noreply]). + +No + + +% the same three asynchronous messages but making them atomic for the receiver object +% (this should always work): + +| ?- threaded_call(nasty1::update_db(_), [atomic, noreply]), threaded_call(nasty1::update_db(_), [atomic, noreply]), threaded_call(nasty1::update_db(_), [atomic, noreply]). + +Yes + + +% a better solution is to declare predicates that need to be thread syncronized as "atomic", +% as exemplified in object "nasty2": + +| ?- nasty2::(io(alpha), io(digit), io(alpha)). + +abcdefghijklmnopqrstzyxwuv +0123456789 +abcdefghijklmnopqrstzyxwuv + +Yes + + +| ?- nasty2::(update_db(X), update_db(Y), update_db(Z)). + +X = 1 +Y = 2 +Z = 3 + +Yes diff --git a/Logtalk/examples/threads/atomic/atomic.lgt b/Logtalk/examples/threads/atomic/atomic.lgt new file mode 100644 index 000000000..3475912a4 --- /dev/null +++ b/Logtalk/examples/threads/atomic/atomic.lgt @@ -0,0 +1,121 @@ + +:- object(nasty1). + + :- info([ + version is 1.0, + author is 'Paulo Moura', + date is 2006/04/14, + comment is 'Simple example for using the "atomic" option for multi-threading calls with side-effects.']). + + :- threaded. + + :- public(update_db/1). + :- mode(update_db(-integer), one). + :- info(update_db/1, [ + comment is 'Perform a database update with a long delay between retracting the old information and asserting the new one.', + argnames is ['New']]). + + :- private(db/1). + :- dynamic(db/1). + + :- public(io/1). + :- mode(io(+atom), one). + :- info(io/1, [ + comment is 'Write some characters to the standard output stream with a long delay between each write operation.', + argnames is ['Chars']]). + + db(0). + + update_db(New) :- + retract(db(Old)), + waste_time, + New is Old + 1, + waste_time, + assertz(db(New)). + + io(alpha) :- + write(a), waste_time, write(b), waste_time, write(c), waste_time, write(d), waste_time, write(e), + write(f), waste_time, write(g), waste_time, write(h), waste_time, write(i), waste_time, write(j), + write(k), waste_time, write(l), waste_time, write(m), waste_time, write(n), waste_time, write(o), + write(p), waste_time, write(q), waste_time, write(r), waste_time, write(s), waste_time, write(t), + write(z), waste_time, write(y), waste_time, write(x), waste_time, write(w), waste_time, write(u), + write(v), nl. + + io(digit) :- + write(0), waste_time, write(1), waste_time, write(2), waste_time, write(3), waste_time, write(4), + write(5), waste_time, write(6), waste_time, write(7), waste_time, write(8), waste_time, write(9), nl. + + waste_time :- + between(1, 10000, _), + fail. + waste_time. + + between(Lower, _, Lower). + between(Lower, Upper, Integer) :- + Lower < Upper, + Next is Lower + 1, + between(Next, Upper, Integer). + +:- end_object. + + +:- object(nasty2). + + :- info([ + version is 1.0, + author is 'Paulo Moura', + date is 2006/04/14, + comment is 'Simple example for using the "atomic" option for multi-threading calls with side-effects.']). + + :- threaded. + + :- public(update_db/1). + :- atomic(update_db/1). + :- mode(update_db(-integer), one). + :- info(update_db/1, [ + comment is 'Perform a database update with a long delay between retracting the old information and asserting the new one.', + argnames is ['New']]). + + :- private(db/1). + :- dynamic(db/1). + + :- public(io/1). + :- atomic(io/1). + :- mode(io(+atom), one). + :- info(io/1, [ + comment is 'Write some characters to the standard output stream with a long delay between each write operation.', + argnames is ['Chars']]). + + db(0). + + update_db(New) :- + retract(db(Old)), + waste_time, + New is Old + 1, + waste_time, + assertz(db(New)). + + io(alpha) :- + write(a), waste_time, write(b), waste_time, write(c), waste_time, write(d), waste_time, write(e), + write(f), waste_time, write(g), waste_time, write(h), waste_time, write(i), waste_time, write(j), + write(k), waste_time, write(l), waste_time, write(m), waste_time, write(n), waste_time, write(o), + write(p), waste_time, write(q), waste_time, write(r), waste_time, write(s), waste_time, write(t), + write(z), waste_time, write(y), waste_time, write(x), waste_time, write(w), waste_time, write(u), + write(v), nl. + + io(digit) :- + write(0), waste_time, write(1), waste_time, write(2), waste_time, write(3), waste_time, write(4), + write(5), waste_time, write(6), waste_time, write(7), waste_time, write(8), waste_time, write(9), nl. + + waste_time :- + between(1, 100000, _), + fail. + waste_time. + + between(Lower, _, Lower). + between(Lower, Upper, Integer) :- + Lower < Upper, + Next is Lower + 1, + between(Next, Upper, Integer). + +:- end_object. diff --git a/Logtalk/examples/threads/atomic/loader.lgt b/Logtalk/examples/threads/atomic/loader.lgt new file mode 100644 index 000000000..d76562fe7 --- /dev/null +++ b/Logtalk/examples/threads/atomic/loader.lgt @@ -0,0 +1,13 @@ + +:- initialization( + logtalk_load( + atomic)). + +/* +If you intend to use the FOP XSL:FO processor for generating PDF documenting +files, comment the directive above and uncomment the directive below + +:- initialization( + logtalk_load( + atomic, [xmlsref(standalone)])). +*/ diff --git a/Logtalk/examples/threads/birthdays/NOTES.txt b/Logtalk/examples/threads/birthdays/NOTES.txt new file mode 100644 index 000000000..8da690f9a --- /dev/null +++ b/Logtalk/examples/threads/birthdays/NOTES.txt @@ -0,0 +1,12 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +To load this example and for sample queries, please see the SCRIPT file. + +This folder contains a simple multi-threading example with agents and +their birthdays. diff --git a/Logtalk/examples/threads/birthdays/SCRIPT.txt b/Logtalk/examples/threads/birthdays/SCRIPT.txt new file mode 100644 index 000000000..526d86e86 --- /dev/null +++ b/Logtalk/examples/threads/birthdays/SCRIPT.txt @@ -0,0 +1,52 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +% start by loading the "event_handlersp" protocol: + +| ?- logtalk_load(library(event_handlersp)). +... + + +% now you are ready for loading the example: + +| ?- logtalk_load(birthdays(loader)). +... + + +% create two new agents, Paul and Nathalie: + +| ?- agent::(new(paul, 40, male), new(nathalie, 32, female)). + +Yes + + +% make them friends: + +| ?- paul::new_friend(nathalie). + +Yes + + +% it's birthday for Nathalie: + +| ?- nathalie::birthday. + +Happy birthday from paul! +Thanks! Here, have a slice of cake, paul. +Thanks for the cake nathalie! + +Yes + + +% tell Paul to ask Nathalie her age: + +| ?- paul::ask_age(nathalie, Age). + +Age = 33 + +Yes diff --git a/Logtalk/examples/threads/birthdays/birthdays.lgt b/Logtalk/examples/threads/birthdays/birthdays.lgt new file mode 100644 index 000000000..c981591ab --- /dev/null +++ b/Logtalk/examples/threads/birthdays/birthdays.lgt @@ -0,0 +1,90 @@ + +:- object(agent, + implements(event_handlersp)). + + :- info([ + version is 1.0, + author is 'Peter Robinson and Paulo Moura', + date is 2006/04/09, + comment is 'Simple multi-threading example with agents and their birthdays.']). + + :- threaded. + + :- public(new/3). + :- mode(new(+atom, +integer, +atom), one). + :- info(new/3, [ + comment is 'Creates a new agent given its name, age, and gender.', + argnames is ['Name', 'Age', 'Gender']]). + + :- public(age/1). + :- dynamic(age/1). + :- mode(age(?integer), zero_or_one). + :- info(age/1, [ + comment is 'Agent age.']). + + :- public(ask_age/2). + :- mode(ask_age(+atom, ?integer), zero_or_one). + :- info(ask_age/2, [ + comment is 'Ask a friend his/her age.', + argnames is ['Name', 'Age']]). + + :- public(gender/1). + :- dynamic(gender/1). + :- mode(gender(?integer), zero_or_one). + :- info(gender/1, [ + comment is 'Agent gender.']). + + :- public(birthday/0). + :- mode(birthday, one). + :- info(birthday/0, [ + comment is 'Increments an agent age, an unfortunate side-effect of its birthday.']). + + :- public(happy_birthday/1). + :- mode(happy_birthday(+object_identifier), one). + :- info(happy_birthday/1, [ + comment is 'Happy birthday message from a friend.', + argnames is ['From']]). + + :- public(cake_slice/1). + :- mode(cake_slice(+object_identifier), one). + :- info(cake_slice/1, [ + comment is 'Offer a slice of birthday cake to a friend.', + argnames is ['From']]). + + :- public(new_friend/1). + :- mode(new_friend(+object_identifier), one). + :- info(new_friend/1, [ + comment is 'New friend, watch out for his/her birthday.', + argnames is ['Name']]). + + new(Name, Age, Gender) :- + this(This), + create_object(Name, [extends(This)], [threaded], [age(Age), gender(Gender)]). + + ask_age(Friend, Age) :- + threaded_call(Friend::age(Age)), + threaded_exit(Friend::age(Age)). + + birthday :- + ::retract(age(Old)), + New is Old + 1, + ::assertz(age(New)). + + happy_birthday(From) :- + self(Self), + write('Happy birthday from '), write(From), write('!'), nl, + write('Thanks! Here, have a slice of cake, '), write(From), write('.'), nl, + threaded_call(From::cake_slice(Self), [noreply]). + + cake_slice(From) :- + write('Thanks for the cake '), write(From), write('!'), nl. + + new_friend(Friend) :- + self(Self), + define_events(after, Friend, birthday, _, Self). + + after(Friend, birthday, _) :- + self(Self), + threaded_call(Friend::happy_birthday(Self), [noreply]). + +:- end_object. diff --git a/Logtalk/examples/threads/birthdays/loader.lgt b/Logtalk/examples/threads/birthdays/loader.lgt new file mode 100644 index 000000000..53feda1de --- /dev/null +++ b/Logtalk/examples/threads/birthdays/loader.lgt @@ -0,0 +1,13 @@ + +:- initialization( + logtalk_load( + [birthdays], [events(on)])). + +/* +If you intend to use the FOP XSL:FO processor for generating PDF documenting +files, comment the directive above and uncomment the directive below + +:- initialization( + logtalk_load( + [birthdays], [events(on), xmlsref(standalone)])). +*/ diff --git a/Logtalk/examples/threads/functions/NOTES.txt b/Logtalk/examples/threads/functions/NOTES.txt new file mode 100644 index 000000000..ea63e0b40 --- /dev/null +++ b/Logtalk/examples/threads/functions/NOTES.txt @@ -0,0 +1,14 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +To load this example and for sample queries, please see the SCRIPT file. + +This folder contains a simple multi-threading example illustrating how +to create threads for competing goals, which one performing the same +task using diferent methods. The first goal to complete leads to the +immediate termination of the threads running the remaining goals. diff --git a/Logtalk/examples/threads/functions/SCRIPT.txt b/Logtalk/examples/threads/functions/SCRIPT.txt new file mode 100644 index 000000000..5399f1b9a --- /dev/null +++ b/Logtalk/examples/threads/functions/SCRIPT.txt @@ -0,0 +1,65 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +% start by loading the loading the example: + +| ?- logtalk_load(functions(loader)). +... + + +% find the roots of some functions using each one of provided methods: + +| ?- bisection::find_root(f1, 1.0, 2.3, 1e-15, Zero). + +Zero = 2.0 +yes + +| ?- newton::find_root(f1, 1.0, 2.3, 1e-15, Zero). + +Zero = 2.0 +yes +| ?- muller::find_root(f1, 1.0, 2.3, 1e-15, Zero). + +Zero = 2.0 +yes + +| ?- bisection::find_root(f2, 1.0, 1.3, 1e-15, Zero). + +Zero = 1.25809265664599 +yes + +| ?- newton::find_root(f2, 1.0, 1.3, 1e-15, Zero). + +Zero = 1.25809265664599 +yes + +| ?- muller::find_root(f2, 1.0, 1.3, 1e-15, Zero). + +Zero = 1.25809265664599 +yes + + +% find the roots of some functions running all methods at once using multi-threading: + +| ?- function_root::find_root(f1, 1.0, 2.3, 1e-15, Zero, Method). + +Zero = 2.0 +Method = bisection +yes + +| ?- function_root::find_root(f2, 1.0, 1.3, 1e-15, Zero, Method). + +Zero = 1.25809265664599 +Method = newton +yes + +| ?- function_root::find_root(f3, 0.0, 3.0, 1e-15, Zero, Method). + +Zero = 1.4142135623731 +Method = newton +yes diff --git a/Logtalk/examples/threads/functions/functions.lgt b/Logtalk/examples/threads/functions/functions.lgt new file mode 100644 index 000000000..369caf59d --- /dev/null +++ b/Logtalk/examples/threads/functions/functions.lgt @@ -0,0 +1,268 @@ + +:- protocol(find_rootp). + + :- info([ + version is 1.0, + date is 2006/4/21, + author is 'Paulo Nunes', + comment is 'Default protocol for root find algorithms.']). + + :- public(find_root/5). + :- mode(find_root(+object_identifier, +float, +float, +float, -float), one). + :- info(find_root/5, [ + comment is 'Find the root of a function in the interval [A, B] given a maximum aproximation error.', + argnames is ['Function', 'A', 'B', 'Error', 'Zero']]). + + :- public(find_root/6). + :- mode(find_root(+object_identifier, +float, +float, +float, -float, -object_identifier), one). + :- info(find_root/6, [ + comment is 'Find the root of a function in the interval [A, B] given a maximum aproximation error. Return the method used.', + argnames is ['Function', 'A', 'B', 'Error', 'Zero', 'Method']]). + +:- end_protocol. + + +:- protocol(functionp). + + :- info([ + version is 1.0, + date is 2006/4/21, + author is 'Paulo Nunes', + comment is 'Default protocol for real functions of a single real variable.']). + + :- public(eval/2). + :- mode(eval(+float, -float), one). + :- info(eval/2, [ + comment is 'Calculate the function value.', + argnames is ['X', 'Fx']]). + + :- public(evald/2). + :- mode(evald(+float, -float), one). + :- info(evald/2, [ + comment is 'Calculate the value of the function derivative.', + argnames is ['X', 'DFx']]). + +:- end_protocol. + + +:- object(f1, + implements(functionp)). + + % x^2 - 4 + % 2.0 + + eval(X, Y) :- + Y is X * X - 4. + evald(X, Y) :- + Y is 2 * X. + +:- end_object. + + +:- object(f2, + implements(functionp)). + + % x^7 + 9x^5 - 13x - 17 + % 1.29999999999945448 + + eval(X, Y) :- + Y is X**7 + 9*X**5 - 13*X - 17. + + evald(X, Y) :- + Y is 7*X**6 + 45*X**4 - 13. + +:- end_object. + + +:- object(f3, + implements(functionp)). + + % (x - sqrt(2))^7 + % 1.41421356237309537 + + eval(X, Y) :- + Y is (X - sqrt(2.0))**8. + + evald(X, Y) :- + Y is 8*(X - sqrt(2.0))**7. + +:- end_object. + + +:- object(function_root, + implements(find_rootp)). + + :- info([ + version is 1.0, + date is 2006/4/21, + author is 'Paulo Nunes', + comment is 'Multi-threading interface to root finding algorithms.']). + + :- threaded. + + find_root(Function, A, B, Error, Zero) :- + find_root(Function, A, B, Error, Zero, _). + + find_root(Function, A, B, Error, Zero, Algorithm) :- + threaded_call( + ( try_method(bisection, Function, A, B, Error, Zero) + ; try_method(newton, Function, A, B, Error, Zero) + ; try_method(muller, Function, A, B, Error, Zero) + )), + threaded_exit(try_method(Algorithm, Function, A, B, Error, Zero)). + + try_method(Algorithm, Function, A, B, Error, Zero) :- + Algorithm::find_root(Function, A, B, Error, Zero). + +:- end_object. + + +:- object(bisection, + implements(find_rootp)). + + :- info([ + version is 1.0, + date is 2006/4/21, + author is 'Paulo Nunes', + comment is 'Bisection algorithm.']). + + find_root(Function, A, B, Error, Zero) :- + Function::eval(A, Fa), + Function::eval(B, Fb), + ( Fa > 0.0, Fb < 0.0 -> + true + ; Fa < 0.0, Fb > 0.0 + ), + X0 is (A + B) / 2, + Function::eval(X0, F0), + bisection(Function, A, B, X0, F0, Error, Zero). + + bisection(_, _, _, Xn1, 0.0, _, Xn1) :- + !. + + bisection(_, Xn1, Xn, _, _, Error, Xn1) :- + abs(Xn1 - Xn) < Error, + !. + + bisection(Function, An, Bn, _, _, Error, Zero) :- + Xn1 is (An + Bn) / 2, + Function::eval(Xn1, Fn1), + Function::eval(An, FAn), + ( Fn1*FAn < 0.0 -> + An1 is An, + Bn1 is Xn1 + ; An1 is Xn1, + Bn1 is Bn + ), + bisection(Function, An1, Bn1, Xn1, Fn1, Error, Zero). + +:- end_object. + + +:- object(newton, + implements(find_rootp)). + + :- info([ + version is 1.0, + date is 2006/4/21, + author is 'Paulo Nunes', + comment is 'Newton algorithm.']). + + find_root(Function, Xa, Xb, Deviation, Zero) :- + X0 is (Xa + Xb) / 2, + newton(Function, X0, Deviation, Zero). + + newton(Function, X0, Deviation, Zero) :- + Xn1 is X0, + Function::eval(Xn1, Fn1), + Function::evald(Xn1, DFn1), + Ac is -(Fn1 / DFn1), + newton(Function, Xn1, Deviation, Fn1, Ac, Zero). + + % test deviation + newton(_, Xn1, Deviation, _, Ac, Xn1) :- + abs(Ac) < Deviation, + !. + + % test solution + newton(_, Xn1, _, 0.0, _, Xn1) :- + !. + + % calc + newton(Function, Xn, Deviation, _, Ac, Zero) :- + Xn1 is Xn + Ac, + Function::eval(Xn1, Fn1), + Function::evald(Xn1, DFn1), + Ac1 is (-(Fn1 / DFn1)), + newton(Function, Xn1, Deviation, Fn1, Ac1, Zero). + +:- end_object. + + +:- object(muller, + implements(find_rootp)). + + :- info([ + version is 1.0, + date is 2006/4/21, + author is 'Paulo Nunes', + comment is 'Muller algorithm.']). + + find_root(Function, Xa, Xb, Deviation, Zero) :- + Xc is (Xa + Xb) / 2, + muller(Function, Xa, Xc, Xb, Deviation, Zero). + + muller(Function, Xa, Xb, Xc, Deviation, Zero) :- + Function::eval(Xa, Ya), + Function::eval(Xb, Yb), + Function::eval(Xc, Yc), + H1 is (Xb - Xa), + DDba is ((Yb - Ya) / H1), + Ac is (Deviation + 1), + muller(Function, Xa, Xb, Xc, Deviation, Ya, Yb, Yc, Ac, H1, DDba, Zero). + + % complex + muller(_, _, _, complex, _, _, _, _, _, _, _, complex) :- + !. + + % test deviation + muller(_, _, _, Xc, Deviation, _, _, _, Ac, _, _, Xc) :- + abs(Ac) < Deviation, + !. + + % test solution + muller(_, _, _, Xc, _, _, _, 0.0, _, _, _, Xc) :- + !. + + % calc + muller(Function, Xa, Xb, Xc, Deviation, _, Yb, Yc, _, _, DDba, Zero) :- + H2n is (Xc - Xb), + DDcbn is ((Yc - Yb) / H2n), + Cn is ((DDcbn - DDba) / (Xc - Xa)), + Bn is (DDcbn + H2n * Cn), + Rn is (Bn * Bn - 4.0 * Yc * Cn), + % complex + % write(Rn), + ( Rn < 0.0 -> + muller(Function, _, _, complex, Deviation, _, _, _, _, _, _, Zero), + !, fail + ; V is sqrt(Rn) + ), + ( Bn > 0.0 -> + Dn is (Bn + V) + ; Dn is (Bn - V) + ), + Acn is (-(2 * Yc / Dn)), + Xan is Xb, + Xbn is Xc, + Xcn is Xc + Acn, + + Yan is Yb, + Ybn is Yc, + Function::eval(Xcn, Ycn), + + H1n is H2n, + DDban is DDcbn, + muller(Function, Xan, Xbn, Xcn, Deviation, Yan, Ybn, Ycn, Acn, H1n, DDban, Zero). + +:- end_object. diff --git a/Logtalk/examples/threads/functions/loader.lgt b/Logtalk/examples/threads/functions/loader.lgt new file mode 100644 index 000000000..fab5c33fd --- /dev/null +++ b/Logtalk/examples/threads/functions/loader.lgt @@ -0,0 +1,13 @@ + +:- initialization( + logtalk_load( + functions)). + +/* +If you intend to use the FOP XSL:FO processor for generating PDF documenting +files, comment the directive above and uncomment the directive below + +:- initialization( + logtalk_load( + functions, [xmlsref(standalone)])). +*/ diff --git a/Logtalk/examples/threads/nondet/NOTES.txt b/Logtalk/examples/threads/nondet/NOTES.txt new file mode 100644 index 000000000..f6354a835 --- /dev/null +++ b/Logtalk/examples/threads/nondet/NOTES.txt @@ -0,0 +1,15 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +To load this example and for sample queries, please see the SCRIPT file. + +This folder contains a simple multi-threading example with calculating +prime numbers on a given interval. Try to run the example in single and +multi-processor (or multi-core) computers and compare the results. Most +Prolog compilers allows you to measure the time taken for proving a goal +using proprietary predicates. diff --git a/Logtalk/examples/threads/nondet/SCRIPT.txt b/Logtalk/examples/threads/nondet/SCRIPT.txt new file mode 100644 index 000000000..6fb5c8c0d --- /dev/null +++ b/Logtalk/examples/threads/nondet/SCRIPT.txt @@ -0,0 +1,29 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +% start by loading the loading the example: + +| ?- logtalk_load(nondet(loader)). +... + + +% make a threaded call with a non-deterministic goal: + +| ?- threaded_call(lists::member(X, [1,2,3])). + +X = _G189 +yes + +% retrieve through backtracking all solutions for the non-deterministic goal: + +| ?- threaded_exit(lists::member(X, [1,2,3])). + +X = 1 ; +X = 2 ; +X = 3 ; +no diff --git a/Logtalk/examples/threads/nondet/loader.lgt b/Logtalk/examples/threads/nondet/loader.lgt new file mode 100644 index 000000000..40a058999 --- /dev/null +++ b/Logtalk/examples/threads/nondet/loader.lgt @@ -0,0 +1,13 @@ + +:- initialization( + logtalk_load( + nondet)). + +/* +If you intend to use the FOP XSL:FO processor for generating PDF documenting +files, comment the directive above and uncomment the directive below + +:- initialization( + logtalk_load( + nondet, [xmlsref(standalone)])). +*/ diff --git a/Logtalk/examples/threads/nondet/nondet.lgt b/Logtalk/examples/threads/nondet/nondet.lgt new file mode 100644 index 000000000..aeca9b6f3 --- /dev/null +++ b/Logtalk/examples/threads/nondet/nondet.lgt @@ -0,0 +1,12 @@ + +:- object(lists). + + :- threaded. + + :- public(member/2). + + member(H, [H| _]). + member(H, [_| T]) :- + member(H, T). + +:- end_object. diff --git a/Logtalk/examples/threads/primes/NOTES.txt b/Logtalk/examples/threads/primes/NOTES.txt new file mode 100644 index 000000000..f6354a835 --- /dev/null +++ b/Logtalk/examples/threads/primes/NOTES.txt @@ -0,0 +1,15 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +To load this example and for sample queries, please see the SCRIPT file. + +This folder contains a simple multi-threading example with calculating +prime numbers on a given interval. Try to run the example in single and +multi-processor (or multi-core) computers and compare the results. Most +Prolog compilers allows you to measure the time taken for proving a goal +using proprietary predicates. diff --git a/Logtalk/examples/threads/primes/SCRIPT.txt b/Logtalk/examples/threads/primes/SCRIPT.txt new file mode 100644 index 000000000..216db974b --- /dev/null +++ b/Logtalk/examples/threads/primes/SCRIPT.txt @@ -0,0 +1,31 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +% start by loading the loading the example: + +| ?- logtalk_load(primes(loader)). +... + + +% calculate the prime numbers in a given interval using a single thread: + +| ?- primes::st_prime_numbers(1, 200000, Primes). + +Primes = [199999, 199967, 199961, 199933, 199931, 199921, 199909, 199889, 199877|...] + +Yes + + +% calculate the prime numbers in a given interval by splitting the interval +% in two sub-intervals and using a thread pere interval: + +| ?- primes::mt_prime_numbers(1, 200000, Primes). + +Primes = [199999, 199967, 199961, 199933, 199931, 199921, 199909, 199889, 199877|...] + +Yes diff --git a/Logtalk/examples/threads/primes/loader.lgt b/Logtalk/examples/threads/primes/loader.lgt new file mode 100644 index 000000000..5daa8989c --- /dev/null +++ b/Logtalk/examples/threads/primes/loader.lgt @@ -0,0 +1,13 @@ + +:- initialization( + logtalk_load( + primes)). + +/* +If you intend to use the FOP XSL:FO processor for generating PDF documenting +files, comment the directive above and uncomment the directive below + +:- initialization( + logtalk_load( + primes, [xmlsref(standalone)])). +*/ diff --git a/Logtalk/examples/threads/primes/primes.lgt b/Logtalk/examples/threads/primes/primes.lgt new file mode 100644 index 000000000..049ff0525 --- /dev/null +++ b/Logtalk/examples/threads/primes/primes.lgt @@ -0,0 +1,62 @@ + +:- object(primes). + + :- info([ + version is 1.0, + author is 'Paulo Moura', + date is 2006/04/14, + comment is 'Simple example for comparing single and multi-threading calculation of prime numbers.']). + + :- threaded. + + :- public(st_prime_numbers/3). + :- mode(st_prime_numbers(+integer, +integer, -list), one). + :- info(st_prime_numbers/3, [ + comment is 'Returns all prime numbers in the given interval using a single calculation thread.', + argnames is ['Inf', 'Sup', 'Primes']]). + + :- public(mt_prime_numbers/3). + :- mode(mt_prime_numbers(+integer, +integer, -list), one). + :- info(mt_prime_numbers/3, [ + comment is 'Returns all prime numbers in the given interval using two calculation threads.', + argnames is ['Inf', 'Sup', 'Primes']]). + + st_prime_numbers(N, M, Primes) :- + M > N, + prime_numbers(N, M, [], Primes). + + mt_prime_numbers(N, M, Primes) :- + M > N, + N1 is N + (M - N) // 2, + N2 is N1 + 1, + threaded_call(prime_numbers(N, N1, [], Acc)), + threaded_call(prime_numbers(N2, M, Acc, Primes)), + threaded_exit(prime_numbers(N, N1, [], Acc)), + threaded_exit(prime_numbers(N2, M, Acc, Primes)). + + prime_numbers(N, M, Primes, Primes) :- + N > M, + !. + prime_numbers(N, M, Acc, Primes) :- + ( is_prime(N) -> + Acc2 = [N| Acc] + ; Acc2 = Acc), + N2 is N + 1, + prime_numbers(N2, M, Acc2, Primes). + + is_prime(2) :- !. + is_prime(Prime):- + Prime > 2, + Prime mod 2 =:= 1, + Sqrt is sqrt(Prime), + is_prime(3, Sqrt, Prime). + + is_prime(N, Sqrt, Prime):- + ( N > Sqrt -> + true + ; Prime mod N > 0, + N2 is N + 2, + is_prime(N2, Sqrt, Prime) + ). + +:- end_object. diff --git a/Logtalk/wenv/context/Logtalk.chl b/Logtalk/wenv/context/Logtalk.chl new file mode 100644 index 000000000..969e204f1 --- /dev/null +++ b/Logtalk/wenv/context/Logtalk.chl @@ -0,0 +1,57 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Logtalk highlighter +// Paulo Moura +// +// http://logtalk.org/ +// +// Last updated on: October, 16 2006 +// +////////////////////////////////////////////////////////////////////////////// + + + +Language: Logtalk + +Filter: Logtalk files (*.lgt)|*.lgt + +HelpFile: + +CaseSensitive: 1 + +LineComment: % + +BlockCommentBeg: /* +BlockCommentEnd: */ + +IdentifierBegChars: +IdentifierChars: + +NumConstBegChars: +NumConstChars: + +EscapeChar: \ + + +KeyWords1: :: ^^ { } + + +StringBegChar: " +StringEndChar: " +MultilineStrings: 0 + +UsePreprocessor: 0 + +CurrLineHighlighted: 0 + + +SpaceCol: clWindowText clWindow +Keyword1Col: clNavy clWindow B +IdentifierCol: clBlue clWindow +CommentCol: clGray clWindow I +NumberCol: clWindowText clWindow +StringCol: clMaroon clWindow +SymbolCol: clPurple clWindow +PreprocessorCol: clBlue clWindow +SelectionCol: clWhite clNavy +CurrentLineCol: clBlack clYellow diff --git a/Logtalk/wenv/context/NOTES.txt b/Logtalk/wenv/context/NOTES.txt new file mode 100644 index 000000000..f17207dd0 --- /dev/null +++ b/Logtalk/wenv/context/NOTES.txt @@ -0,0 +1,20 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +This directory contains files that provides basic syntax coloring for +editing Logtalk source files with the text editor Context 0.98.3 or +later version: + + http://www.context.cx/ + +To install copy the file "Logtalk.chl" to the Highlighters folder of +your ConTEXT folder (e.g. C:\Program Files\ConTEXT\Highlighters). If +ConTEXT is running, restart it to update its list of highlighters. + + +THESE SYNTAX COLORING SUPPORT FILES ARE UNDER DEVELOPMENT. diff --git a/Logtalk/wenv/npp/NOTES.txt b/Logtalk/wenv/npp/NOTES.txt new file mode 100644 index 000000000..c97be2319 --- /dev/null +++ b/Logtalk/wenv/npp/NOTES.txt @@ -0,0 +1,24 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +This directory contains files that provides basic syntax coloring and +code completion for editing Logtalk source files with the text editor +Notepad++ 3.9 or later version: + + http://notepad-plus.sourceforge.net/ + +Install the supporting files by performing the following steps: + +1. Copy the file "userDefineLang.xml" to the folder "%APPDATA%\Notepad++". + If the file already exists, merge the contents of the two files. + +2. In order to use auto-completion, copy the file "logtalk.api" to the + directory YOUR_NPP_INSTALL_DIR\plugins\APIs. + + +THESE SYNTAX COLORING SUPPORT FILES ARE UNDER DEVELOPMENT. diff --git a/Logtalk/wenv/npp/logtalk.api b/Logtalk/wenv/npp/logtalk.api new file mode 100644 index 000000000..af6a6a63e --- /dev/null +++ b/Logtalk/wenv/npp/logtalk.api @@ -0,0 +1,138 @@ +abolish +abolish_category +abolish_events +abolish_object +abolish_protocol +after +alias +arg +asserta +assertz +atom +atomic +atom_chars +atom_chars +atom_codes +atom_codes +atom_concat +atom_concat +atom_length +at_end_of_stream +bagof +before +call +calls +catch +category +category_property +char_code +char_conversion +clause +close +compound +copy_term +create_category +create_object +create_protocol +current_category +current_char_conversion +current_event +current_input +current_logtalk_flag +current_object +current_op +current_output +current_predicate +current_prolog_flag +current_protocol +define_events +discontiguous +dynamic +encoding +end_category +end_object +end_protocol +expand_term +extends +extends_object +extends_protocol +fail +findall +float +flush_output +forall +functor +get_byte +get_char +get_code +halt +implements +implements_protocol +imports +imports_category +info +initialization +instantiates +instantiates_class +integer +logtalk_compile +logtalk_library_path +logtalk_load +meta_predicate +mode +nl +nonvar +number +number_chars +number_chars +number_codes +number_codes +object +object_property +once +op +open +parameter +peek_byte +peek_char +peek_code +phrase +predicate_property +private +protected +protocol +protocol_property +public +put_byte +put_char +put_code +read +read_term +repeat +retract +retractall +self +sender +setof +set_input +set_logtalk_flag +set_output +set_prolog_flag +set_stream_position +specializes +specializes_class +stream_property +sub_atom +term_expansion +this +threaded +threaded_call +threaded_exit +throw +true +unify_with_occurs_check +uses +var +write +writeq +write_canonical diff --git a/Logtalk/wenv/npp/userDefineLang.xml b/Logtalk/wenv/npp/userDefineLang.xml new file mode 100644 index 000000000..d368aeef1 --- /dev/null +++ b/Logtalk/wenv/npp/userDefineLang.xml @@ -0,0 +1,36 @@ + + + + + + + + + "'0"'0 + :- + :- + ^ + 1/* 2*/ 0% + :- + :: + + + + + + + + + + + + + + + + + + + + + diff --git a/Logtalk/wenv/smultron/NOTES.txt b/Logtalk/wenv/smultron/NOTES.txt new file mode 100644 index 000000000..fc879a80a --- /dev/null +++ b/Logtalk/wenv/smultron/NOTES.txt @@ -0,0 +1,29 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +This directory contains the Logtalk.plist file that provides basic syntax +coloring, code completion, and entity index (using the "function" list) +for editing Logtalk source files with the Smultron 2.2 text editor: + + http://smultron.sourceforge.net/ + +To install: + +1. Copy the file "logtalk.plist" to the application bundle (ctrl-click on +Smultron and choose Show Package Contents and then navigate to the folder +Contents/Resources/Syntax Definitions/). + +2. Copy the file "SyntaxDefinitions.plist" to the folder: + + ~/Library/Application Support/Smultron + +If the file already exists, merge the contents of the two files. + +Logtalk source files (including the programming examples) are usually +formatted using four-spaces tabs; you may set the tab width on the +editor preference panel. diff --git a/Logtalk/wenv/smultron/SyntaxDefinitions.plist b/Logtalk/wenv/smultron/SyntaxDefinitions.plist new file mode 100644 index 000000000..618b5b51b --- /dev/null +++ b/Logtalk/wenv/smultron/SyntaxDefinitions.plist @@ -0,0 +1,14 @@ + + + + + + name + Logtalk + file + logtalk + extensions + lgt config + + + diff --git a/Logtalk/wenv/smultron/logtalk.plist b/Logtalk/wenv/smultron/logtalk.plist new file mode 100644 index 000000000..82a6327f5 --- /dev/null +++ b/Logtalk/wenv/smultron/logtalk.plist @@ -0,0 +1,183 @@ + + + + + autocompleteWords + + encoding + calls + category + dynamic + end_category + end_object + end_protocol + info + initialization + object + protocol + threaded + uses + alias + discontiguous + meta_predicate + mode + op + private + protected + public + current_object + current_protocol + current_category + object_property + protocol_property + category_property + create_object + create_protocol + create_category + abolish_object + abolish_protocol + abolish_category + extends_object + extends_protocol + implements_protocol + imports_category + instantiates_class + specializes_class + abolish_events + current_event + define_events + logtalk_load + logtalk_compile + logtalk_library_path + current_logtalk_flag + set_logtalk_flag + threaded_call + threaded_exit + self + this + sender + parameter + before + after + phrase + expand_term + term_expansion + true + fail + call + catch + throw + unify_with_occurs_check + var + atom + integer + float + atomic + compound + nonvar + number + arg + copy_term + functor + current_predicate + predicate_property + abolish + assertz + asserta + clause + retract + retractall + bagof + findall + forall + setof + current_input + current_output + set_input + set_output + open + close + flush_output + stream_property + at_end_of_stream + set_stream_position + get_char + get_code + peek_char + peek_code + put_char + put_code + nl + get_byte + peek_byte + put_byte + read + read_term + write + writeq + write_canonical + atom_chars + atom_codes + atom_concat + number_chars + number_codes + current_op + char_conversion + current_char_conversion + once + repeat + atom_length + atom_concat + sub_atom + atom_chars + atom_codes + char_code + number_chars + number_codes + set_prolog_flag + current_prolog_flag + halt + + beginCommand + + beginFirstMultiLineComment + /* + beginInstruction + + beginSecondMultiLineComment + + beginVariable + + endCommand + + endFirstMultiLineComment + */ + endInstruction + + endSecondMultiLineComment + + endVariable + + firstSingleLineComment + % + firstString + " + functionDefinition + ((?<=:-\sobject\()|(?<=:-\sprotocol\()|(?<=:-\scategory\())[a-z][a-zA-Z_]* + removeFromFunction + + keywords + + :: + ^^ + + keywordsCaseSensitive + + recolourKeywordIfAlreadyColoured + + secondSingleLineComment + + secondString + ' + + diff --git a/Logtalk/wenv/superedi/Logtalk.col b/Logtalk/wenv/superedi/Logtalk.col new file mode 100644 index 000000000..9582620db --- /dev/null +++ b/Logtalk/wenv/superedi/Logtalk.col @@ -0,0 +1,44 @@ +[NormalText] +BkColor=FFFFFF +TextColor=000000 + +[SelectedText] +[MatchingBracket] + +[Whitespace] +BkColor=FFFFFF + +[SelectionMargin] +[Preprocessor] + +[Comment] +TextColor=008000 + +[Keyword 1] +BkColor=FFFFFF +TextColor=000000 + +[Keyword 2] +BkColor=FFFFFF +TextColor=000000 + +[Keyword 3] +BkColor=FFFFFF +TextColor=000000 + +[Keyword 4] +BkColor=FFFFFF +TextColor=000000 + +[Keyword 5] +BkColor=FFFFFF +TextColor=000000 + +[Keyword 6] +BkColor=FFFFFF +TextColor=000000 + +[Number] +[Operator] +[Char] +[String] diff --git a/Logtalk/wenv/superedi/Logtalk.syn b/Logtalk/wenv/superedi/Logtalk.syn new file mode 100644 index 000000000..6fabd3015 --- /dev/null +++ b/Logtalk/wenv/superedi/Logtalk.syn @@ -0,0 +1,322 @@ +; Superedi syntax definitions for Logtalk (http://logtalk.org/) +; +; Author: Paulo Moura +; Last changed in: October 16, 2006 + + +C=1 + +[Syntax] +Namespace1 = 6 +IgnoreCase = NO +InitKeyWordChars = +KeyWordChars = a-zA-Z0-9_:^;*+,-./;<=>?@[\]^{|} +KeyWordLength = +BracketChars = +OperatorChars = <=>?@[\]| +PreprocStart = +SyntaxStart = +SyntaxEnd = +HexPrefix = 0x +CommentStart = /* +CommentEnd = */ +CommentStartAlt = +CommentEndAlt = +SingleComment = % +SingleCommentCol = +SingleCommentAlt = +SingleCommentColAlt = +SingleCommentEsc = +StringsSpanLines = Yes +StringStart = " +StringEnd = " +StringAlt = +StringEsc = \ +CharStart = ' +CharEnd = ' +CharEsc = \ + + +[FunctionList] +Object = ^\s*:-\sobject[(]{[a-z][a-zA-Z_]+} +Interface = ^\s*:-\sprotocol[(]{[a-z][a-zA-Z_]+} +Item = ^\s*:-\scategory[(]{[a-z][a-zA-Z_]+} + + +[Keywords 1] + +; Logtalk message sending operators + +^^ +:- +. +, +; +:: + + +; Logtalk external call +{ +} + + +[Keywords 2] + +; Logtalk opening entity directives +object +protocol +category +module + + +; Logtalk closing entity directives +end_object +end_protocol +end_category + +; Logtalk entity relations +instantiates +specializes +extends +imports +implements + + +[Keywords 3] + +; Logtalk directives +alias +encoding +export +initialization +info +mode +dynamic +discontiguous +multifile +public +protected +private +meta_predicate +op +calls +uses +use_module +threaded + + +[Keywords 4] + +; Logtalk built-in predicates +current_object +current_protocol +current_category +create_object +create_protocol +create_category +object_property +protocol_property +category_property +abolish_object +abolish_protocol +abolish_category +extends_object +extends_protocol +implements_protocol +instantiates_class +specializes_class +imports_category +abolish_events +current_event +define_events +current_logtalk_flag +set_logtalk_flag +logtalk_compile +logtalk_load +logtalk_library_path +forall +retractall + + +[Keywords 5] + +; Logtalk built-in methods +parameter +self +sender +this +current_predicate +predicate_property +abolish +asserta +assertz +clause +retract +retractall +bagof +findall +forall +setof +before +after +expand_term +term_expansion +phrase +threaded_call +threaded_exit + +; Mode operators +? +@ + +; Control constructs +true +fail +call +! +, +; +--> +-> +catch +throw + +; Term unification += +unify_with_occurs_check +\= + +; Term testing +var +atom +integer +float +atomic +compound +nonvar +number + +; Term comparison +@=< +== +\== +@< +@> +@>= + +; Term creation and decomposition +functor +arg +=.. +copy_term + +; Arithemtic evaluation +is + +; Arithemtic comparison +=:= +=\= +< +=< +> +>= + +; Stream selection and control +current_input +current_output +set_input +set_output +open +close +flush_output +stream_property +at_end_of_stream +set_stream_position + +; Character input/output +get_char +get_code +peek_char +peek_code +put_char +put_code +nl + +; Byte input/output +get_byte +peek_byte +put_byte + +; Term input/output +read_term +read +write_term +write +writeq +write_canonical +op +current_op +char_conversion +current_char_conversion + +; Logic and control +\+ +once +repeat + +; Atomic term processing +atom_length +atom_concat +sub_atom +atom_chars +atom_codes +char_code +number_chars +number_codes + +; Implementation defined hooks functions +set_prolog_flag +current_prolog_flag +halt + +; Evaluable functors ++ +- +* +// +/ +rem +mod +abs +sign +float_integer_part +float_fractional_part +float +floor +truncate +round +ceiling + +; Other arithemtic functors +** +sin +cos +atan +exp +log +sqrt + +; Bitwise functors +>> +<< +/\ +\/ +\ + +; Logtalk end-of-clause +. + +; Logtalk list operator +| + + diff --git a/Logtalk/wenv/superedi/NOTES.txt b/Logtalk/wenv/superedi/NOTES.txt new file mode 100644 index 000000000..7cb9014bd --- /dev/null +++ b/Logtalk/wenv/superedi/NOTES.txt @@ -0,0 +1,28 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +This directory contains files that provides basic syntax coloring, +entity index, and code completion for editing Logtalk source files +with the text editor SuperEdi 3.8.1 or later version: + + http://www.wolosoft.com/en/superedi/index.html + +Install the supporting files by performing the following steps: + +1. Copy the file "Logtalk.syn" to the "Syntax" directory in your + SuperEdi installation directory (replacing any existing older file). + +2. Copy the file "Logtalk.col" to the "Syntax" directory in your + SuperEdi installation directory (replacing any existing older file). + +3. Go to the Tools/Options dialog and create a new file type named + "Logtalk". Set the file extension to "lgt" and the syntax and color + scheme to "Logtalk". Set the tab size to "4". + + +THESE SYNTAX COLORING SUPPORT FILES ARE UNDER DEVELOPMENT. diff --git a/Logtalk/wenv/textwrangler/NOTES.txt b/Logtalk/wenv/textwrangler/NOTES.txt new file mode 100644 index 000000000..bf447ada4 --- /dev/null +++ b/Logtalk/wenv/textwrangler/NOTES.txt @@ -0,0 +1,9 @@ +================================================================= +Logtalk - Object oriented extension to Prolog +Release 2.28.2 + +Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved. +================================================================= + + +See the ../bbedit folder. diff --git a/Logtalk/wenv/vim/completion/logtalk.dict b/Logtalk/wenv/vim/completion/logtalk.dict new file mode 100644 index 000000000..8ab5be73e --- /dev/null +++ b/Logtalk/wenv/vim/completion/logtalk.dict @@ -0,0 +1,138 @@ +encoding +calls +category +dynamic +end_category +end_object +end_protocol +info +initialization +object +protocol +threaded +uses +alias +discontiguous +meta_predicate +mode +op +private +protected +public +current_object +current_protocol +current_category +object_property +protocol_property +category_property +create_object +create_protocol +create_category +abolish_object +abolish_protocol +abolish_category +extends +extends_object +extends_protocol +implements +implements_protocol +imports +imports_category +instantiates +instantiates_class +specializes +specializes_class +abolish_events +current_event +define_events +logtalk_load +logtalk_compile +logtalk_library_path +current_logtalk_flag +set_logtalk_flag +threaded_call +threaded_exit +self +this +sender +parameter +before +after +phrase +expand_term +term_expansion +true +fail +call +catch +throw +unify_with_occurs_check +var +atom +integer +float +atomic +compound +nonvar +number +arg +copy_term +functor +current_predicate +predicate_property +abolish +assertz +asserta +clause +retract +retractall +bagof +findall +forall +setof +current_input +current_output +set_input +set_output +open +close +flush_output +stream_property +at_end_of_stream +set_stream_position +get_char +get_code +peek_char +peek_code +put_char +put_code +nl +get_byte +peek_byte +put_byte +read +read_term +write +writeq +write_canonical +atom_chars +atom_codes +atom_concat +number_chars +number_codes +current_op +char_conversion +current_char_conversion +once +repeat +atom_length +atom_concat +sub_atom +atom_chars +atom_codes +char_code +number_chars +number_codes +set_prolog_flag +current_prolog_flag +halt diff --git a/Logtalk/wenv/vim/indent/logtalk.vim b/Logtalk/wenv/vim/indent/logtalk.vim new file mode 100644 index 000000000..52ec31828 --- /dev/null +++ b/Logtalk/wenv/vim/indent/logtalk.vim @@ -0,0 +1,61 @@ +" Maintainer: Paulo Moura +" Revised on: 2006.10.22 +" Language: Logtalk + +" This Logtalk indent file is a modified version of the Prolog +" indent file written by Gergely Kontra + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +let b:did_indent = 1 + +setlocal indentexpr=GetLogtalkIndent() +setlocal indentkeys-=:,0# +setlocal indentkeys+=0%,-,0;,>,0) + +" Only define the function once. +"if exists("*GetLogtalkIndent") +" finish +"endif + +function! GetLogtalkIndent() + " Find a non-blank line above the current line. + let pnum = prevnonblank(v:lnum - 1) + " Hit the start of the file, use zero indent. + if pnum == 0 + return 0 + endif + let line = getline(v:lnum) + let pline = getline(pnum) + + let ind = indent(pnum) + " Previous line was comment -> use previous line's indent + if pline =~ '^\s*%' + retu ind + endif + " Check for entity opening directive on previous line + if pline =~ '^\s*:-\s\(object\|protocol\|category\)\ze(.*,$' + let ind = ind + &sw + " Check for clause head on previous line + elseif pline =~ ':-\s*\(%.*\)\?$' + let ind = ind + &sw + " Check for entity closing directive on previous line + elseif pline =~ '^\s*:-\send_\(object\|protocol\|category\)\.\(%.*\)\?$' + let ind = ind - &sw + " Check for end of clause on previous line + elseif pline =~ '\.\s*\(%.*\)\?$' + let ind = ind - &sw + endif + " Check for opening conditional on previous line + if pline =~ '^\s*\([(;]\|->\)' + let ind = ind + &sw + endif + " Check for closing an unclosed paren, or middle ; or -> + if line =~ '^\s*\([);]\|->\)' + let ind = ind - &sw + endif + return ind +endfunction diff --git a/Logtalk/wenv/vim/syntax/logtalk.vim b/Logtalk/wenv/vim/syntax/logtalk.vim new file mode 100644 index 000000000..09eeec1d3 --- /dev/null +++ b/Logtalk/wenv/vim/syntax/logtalk.vim @@ -0,0 +1,397 @@ +" Vim syntax file +" +" Language: Logtalk +" Maintainer: Paulo Moura +" Last Change: September 17, 2006 + + +" Quit when a syntax file was already loaded: + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + + +" Logtalk is case sensitive: + +syn case match + + +" Logtalk variables + +syn match logtalkVariable "\<\(\u\|_\)\(\w\)*\>" + + +" Logtalk clause functor + +syn match logtalkOperator ":-" + + +" Logtalk quoted atoms and strings + +syn region logtalkString start=+"+ skip=+\\"+ end=+"+ +syn region logtalkAtom start=+'+ skip=+\\'+ end=+'+ + + +" Logtalk message sending operators + +syn match logtalkOperator "::" +syn match logtalkOperator "\^\^" + + +" Logtalk external call + +syn region logtalkExtCall matchgroup=logtalkExtCallTag start="{" matchgroup=logtalkExtCallTag end="}" contains=ALL + + +" Logtalk opening entity directives + +syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- object(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel +syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- protocol(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel +syn region logtalkOpenEntityDir matchgroup=logtalkOpenEntityDirTag start=":- category(" matchgroup=logtalkOpenEntityDirTag end=")\." contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator,logtalkEntityRel + + +" Logtalk closing entity directives + +syn match logtalkCloseEntityDir ":- end_object\." +syn match logtalkCloseEntityDir ":- end_protocol\." +syn match logtalkCloseEntityDir ":- end_category\." + + +" Logtalk entity relations + +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="instantiates(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="specializes(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="extends(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="imports(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator contained +syn region logtalkEntityRel matchgroup=logtalkEntityRelTag start="implements(" matchgroup=logtalkEntityRelTag end=")" contains=logtalkEntity,logtalkVariable,logtalkNumber,logtalkOperator contained + + +" Logtalk directives + +syn region logtalkDir matchgroup=logtalkDirTag start=":- alias(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- atomic(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- encoding(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- initialization(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- info(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- mode(" matchgroup=logtalkDirTag end=")\." contains=logtalkOperator, logtalkAtom +syn region logtalkDir matchgroup=logtalkDirTag start=":- dynamic(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn match logtalkDirTag ":- dynamic\." +syn region logtalkDir matchgroup=logtalkDirTag start=":- discontiguous(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- multifile(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- public(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- protected(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- private(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- meta_predicate(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- op(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- calls(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- uses(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn match logtalkDirTag ":- threaded\." + + +" Module directives + +syn region logtalkDir matchgroup=logtalkDirTag start=":- module(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- export(" matchgroup=logtalkDirTag end=")\." contains=ALL +syn region logtalkDir matchgroup=logtalkDirTag start=":- use_module(" matchgroup=logtalkDirTag end=")\." contains=ALL + + +" Logtalk built-in predicates + +syn match logtalkBuiltIn "\<\(abolish\|c\(reate\|urrent\)\)_\(object\|protocol\|category\)\ze(" + +syn match logtalkBuiltIn "\<\(object\|protocol\|category\)_property\ze(" + +syn match logtalkBuiltIn "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkOperator "->" +syn match logtalkKeyword "\" +syn match logtalkOperator "@>=" + + +" Term creation and decomposition + +syn match logtalkKeyword "\" + + +" Arithemtic comparison + +syn match logtalkOperator "=:=" +syn match logtalkOperator "=\\=" +syn match logtalkOperator "<" +syn match logtalkOperator "=<" +syn match logtalkOperator ">" +syn match logtalkOperator ">=" + + +" Stream selection and control + +syn match logtalkKeyword "\<\(current\|set\)_\(in\|out\)put\ze(" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" + + +" Term input/output + +syn match logtalkKeyword "\" + + +" Atomic term processing + +syn match logtalkKeyword "\" + + +" Evaluable functors + +syn match logtalkOperator "+" +syn match logtalkOperator "-" +syn match logtalkOperator "\*" +syn match logtalkOperator "//" +syn match logtalkOperator "/" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\" +syn match logtalkKeyword "\>" +syn match logtalkOperator "<<" +syn match logtalkOperator "/\\" +syn match logtalkOperator "\\/" +syn match logtalkOperator "\\" + + +" Logtalk list operator + +syn match logtalkOperator "|" + + +" Logtalk numbers + +syn match logtalkNumber "\<\d\+\>" +syn match logtalkNumber "\<\d\+\.\d\+\>" +syn match logtalkNumber "\<\d\+[eE][-+]\=\d\+\>" +syn match logtalkNumber "\<\d\+\.\d\+[eE][-+]\=\d\+\>" +syn match logtalkNumber "\<0'.\>" +syn match logtalkNumber "\<0b[0-1]\+\>" +syn match logtalkNumber "\<0o\o\+\>" +syn match logtalkNumber "\<0x\x\+\>" + + +" Logtalk end-of-clause + +syn match logtalkOperator "\." + + +" Logtalk comments + +syn region logtalkBlockComment start="/\*" end="\*/" fold +syn match logtalkLineComment "%.*" + + +" Logtalk entity folding + +syn region logtalkEntity transparent fold keepend start=":- object(" end=":- end_object\." contains=ALL +syn region logtalkEntity transparent fold keepend start=":- protocol(" end=":- end_protocol\." contains=ALL +syn region logtalkEntity transparent fold keepend start=":- category(" end=":- end_category\." contains=ALL + + +syn sync ccomment logtalkBlockComment maxlines=50 + + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet + +if version >= 508 || !exists("did_logtalk_syn_inits") + if version < 508 + let did_logtalk_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + + HiLink logtalkBlockComment Comment + HiLink logtalkLineComment Comment + + HiLink logtalkOpenEntityDir Normal + HiLink logtalkOpenEntityDirTag PreProc + + HiLink logtalkEntity Normal + + HiLink logtalkEntityRel Normal + HiLink logtalkEntityRelTag PreProc + + HiLink logtalkCloseEntityDir PreProc + + HiLink logtalkDir Normal + HiLink logtalkDirTag PreProc + + HiLink logtalkAtom String + HiLink logtalkString String + + HiLink logtalkNumber Number + + HiLink logtalkKeyword Keyword + + HiLink logtalkBuiltIn Keyword + HiLink logtalkBuiltInMethod Keyword + + HiLink logtalkOperator Operator + + HiLink logtalkExtCall Normal + HiLink logtalkExtCallTag Operator + + HiLink logtalkVariable Identifier + + delcommand HiLink + +endif + + +let b:current_syntax = "logtalk" + +setlocal ts=4 +setlocal sw=4 +setlocal fdm=syntax +setlocal fdc=2 +setlocal autoindent