Markus Triska
77c04c3a14
ADDED: Support for creating TLS servers.
...
The new predicates tls_server_context/2 and tls_server_negotiate/3 can
be used to negotiate TLS connections with clients for encrypted and
authenticated communication.
2021-12-03 16:45:27 +01:00
Markus Triska
79a50de697
ENHANCED: Correct type error for char_type/2.
...
This addresses #905 .
2021-11-29 19:33:22 +01:00
Markus Triska
fc8205d375
ENHANCED: indicate failed initialization/1 goal
...
This addresses #1109 .
2021-11-28 14:50:42 +01:00
Markus Triska
5e55732cb0
ENHANCED: Character type checks for get_char/[1,2].
...
This addresses #906 .
2021-11-28 10:49:40 +01:00
Markus Triska
45cfa6c8d8
use seq//1
2021-11-27 16:32:45 +01:00
Markus Triska
25a06b0bea
use seq//1 and ... //0 which are now available in library(dcgs)
2021-11-27 16:32:44 +01:00
Markus Triska
91af72e8b1
use seq//1
2021-11-27 16:17:45 +01:00
Markus Triska
fd9b354c70
use seq//1 which is now available in library(dcgs)
2021-11-27 16:17:15 +01:00
Markus Triska
1647e67dd4
ENHANCED: Support '_' followed by layout text sequence in integers.
...
This is handy for writing large integers, for example in cryptographic
applications.
This addresses #994 .
Examples:
?- X = 1_000_000.
%@ X = 1000000.
?- X = 1_
000_
000.
%@ X = 1000000.
2021-11-27 10:09:39 +01:00
Markus Triska
803e120a51
use must_be(list, ...) earlier, since it is now faster
2021-11-26 17:11:51 +01:00
Markus Triska
6ba374c62b
ENHANCED: use '$skip_max_list'/4 for fast list tests in can_be/2 and must_be/2
...
This also (partially) addresses #1108 .
2021-11-26 17:11:35 +01:00
Markus Triska
0d4c38138a
use newly available must_be(chars, ...) for fast string tests
2021-11-22 20:00:06 +01:00
Markus Triska
fe291e90f0
use newly available must_be(chars, ...) for fast string tests
2021-11-22 19:58:36 +01:00
Markus Triska
220e1e8d83
ADDED: must_be(chars, ...) and can_be(chars, ...) for string tests.
...
Internal features of Scryer Prolog are used to make these tests fast.
2021-11-22 19:55:34 +01:00
Markus Triska
faf74519dc
use round brackets for meta_predicate/1 declaration
2021-11-20 22:43:53 +01:00
Markus Triska
66becaf91c
FIXED: meta_predicate/1 declaration of cond_t/3.
2021-11-20 22:43:33 +01:00
Markus Triska
6610ba67c4
FIXED: meta_predicate/1 declaration of (',')/3 and (;)/3.
2021-11-20 22:43:07 +01:00
Markus Triska
e05dd5ebb5
FIXED: meta_predicate/1 declaration for tfilter/3.
2021-11-20 22:39:38 +01:00
Markus Triska
cf77f29988
FIXED: meta_predicate/1 declaration for tmember_t/3.
2021-11-20 22:38:27 +01:00
Markus Triska
2be8ed886b
FIXED: meta_predicate/1 declaration for tmember/2.
2021-11-20 22:37:59 +01:00
Markus Triska
21e5b0ab52
FIXED: meta_predicate/1 declaration for tpartition/4.
...
This addresses #1101 .
2021-11-20 22:37:31 +01:00
Markus Triska
d72cb74ffa
mention phrase_to_file/3 which is being prepared in #1100
2021-11-17 21:33:15 +01:00
Markus Triska
3c988d555f
'f' --> f
2021-11-17 21:20:40 +01:00
Markus Triska
5981a65cc2
better layout
2021-11-17 21:20:40 +01:00
Markus Triska
9900762747
use newly available seq//1 from library(dcgs)
...
I am using seq(Ls) instead of plain Ls so that DCGs can be debugged
declaratively, by generalizing away nonterminals in rules.
2021-11-17 21:20:40 +01:00
Markus Triska
bd75e9c184
more elegant solution for parsing numeric arguments, using a DCG
2021-11-16 18:25:35 +01:00
Markus Triska
23df16ecf9
mention the format("~s", [Ls]) pattern and new library(pio) predicates
2021-11-16 18:20:58 +01:00
Markus Triska
57877107d8
use functional notation for all meta_predicate/1 directives
2021-11-11 19:29:32 +01:00
Markus Triska
e9b4a99c8f
FIXED: meta_predicate/1 directive for call_nth/2.
...
This addresses #1021 .
2021-11-11 19:26:27 +01:00
Markus Triska
3045f327d5
FIXED: instantiation errors for alias(Var) in open/4 options
...
This addresses #1030 .
2021-11-08 22:41:04 +01:00
Markus Triska
2d1f182c49
FIXED: instantiation errors for type(Var) in open/4 options
...
This addresses #1030 .
2021-11-08 22:37:46 +01:00
Markus Triska
0677f51717
add motivation and comments about library(pio) predicates
2021-11-08 22:18:30 +01:00
Markus Triska
a9bfeb0e96
use newly available library predicate read_n_chars/3
2021-11-08 21:51:03 +01:00
Markus Triska
c44d27fb7f
mention pure output predicates in the README
2021-11-08 20:29:39 +01:00
Markus Triska
a0a01b8ba7
ADDED: library(format): DCG nonterminal portray_clause_//1, in analogy to format_//2.
2021-11-07 17:47:05 +01:00
Markus Triska
e32215e19a
express format/3 and portray_clause/2 in terms of phrase_to_stream/2
2021-11-07 17:47:05 +01:00
Markus Triska
893fb0e3cc
ADDED: phrase_to_stream/2, writing a list of characters to a stream.
2021-11-07 17:44:45 +01:00
Markus Triska
52af955463
import also partial_string/3 (used in #1071 )
2021-11-04 18:50:40 +01:00
Markus Triska
09e886db0b
ADDED: read_n_chars/3, reading N characters from a stream.
2021-11-04 18:36:27 +01:00
Markus Triska
f668640e3d
move error handling to Prolog by using the new '$first_non_octet'/2
2021-11-04 18:35:22 +01:00
Markus Triska
afcd44deaa
ENHANCED: open/4 to allow opening a stream by specifying stream(S).
...
This allows switching standard output to binary, using for example:
?- current_output(S0), open(stream(S0), write, S, [type(binary)]).
format/3 can then be used to write binary data to S. This is needed
for example when piping binary data to other programs.
This addresses #614 , please read the discussion for more information.
The current implementation is very preliminary: Specifically, it works
by destructively modifiying the parameters of the underlying stream,
making it no longer usable in its original mode. Currently, if the
type of standard output is set to binary, then the toplevel no longer
works. Therefore, after writing binary output to standard output,
the program should either halt, or set the stream type back to text.
2021-11-04 18:33:40 +01:00
Markus Triska
8c8c21c63b
use partial_string/1 for much quicker test
2021-11-04 00:12:00 +01:00
Markus Triska
55dabbe16a
use '$first_non_octet'/2 for much faster domain check
2021-11-04 00:12:08 +01:00
Markus Triska
494bd7b79c
ADDED: '$first_non_octet'/2, for much more efficient domain checks in library(crypto).
...
'$first_non_octet'(Cs, C) <=> C is the leftmost character in the
string Cs whose character code is not in 0..255.
2021-11-04 00:12:00 +01:00
Markus Triska
320ee072e6
ENHANCED: Much faster Base64 encoding/decoding, using partial_string/1 for a quick check.
2021-11-03 22:07:20 +01:00
Markus Triska
ded4a75b9c
use round brackets for meta_predicate declarations
...
This is because meta_predicate is not a standard operator.
2021-09-04 22:02:17 +02:00
Markus Triska
9e75eb35a0
ADDED: Rudimentary version of phrase_to_file/2 in library(pio)
...
See #691 for more information.
2021-09-04 21:13:51 +02:00
Markus Triska
9e13f18463
ENHANCED: Domain error non_empty_list for empty arguments, addressing #1024 .
...
Example:
?- format("~d", []).
%@ caught: error(domain_error(non_empty_list,[]),format_//2)
2021-08-15 12:29:28 +02:00
Markus Triska
9d3f3eb013
ENHANCED: format_string domain error for invalid radix in format string
...
This addresses #1024 .
Example:
?- format("hello ~0r!", [12]).
%@ caught: error(domain_error(format_string,"~0r"),format_//2)
2021-08-14 20:04:07 +02:00
Markus Triska
78c2f19e72
ENHANCED: If N is omitted in ~Nr or ~NR, it defaults to 8.
...
This is for compatibility with Quintus, SICStus and GNU Prolog,
addressing #1024 .
Example:
?- format("~r", [10]).
%@ 12 true.
2021-08-14 13:48:21 +02:00
Markus Triska
bf9654e138
ADDED: ... //0, describing an arbitrary number of elements
...
This is a very versatile nonterminal. For instance, repeated elements:
?- phrase((...,[E],...,[E],...), "hello!!").
%@ E = l
%@ ; E = !
%@ ; false.
2021-07-03 09:54:01 +02:00
Markus Triska
3e7cd24814
address #995 : wrong results for popcount/1
...
Many thanks to @notoria and @flexoron for very useful test cases!
2021-06-21 21:19:37 +02:00
Markus Triska
ee393c66dd
ADDED: popcount(+Integer)
...
Example:
?- X #= popcount(3+5).
X = 1.
This builds on #986 provided by @Regan-Koopmans. Many thanks!
2021-06-17 20:18:36 +02:00
Markus Triska
066f740819
check for correct domain of integers in reifiable expressions also in the expanded code
...
This is to preserve domain errors instead of failing silently. Example:
?- 5 #> 3 #<==> 2.
%@ caught: error(domain_error(clpz_reifiable_expression,2),unknown(2)-1)
2021-06-03 22:57:58 +02:00
Markus Triska
fc8d33a98a
ENHANCED: Goal expansion for reified constraints.
...
Used in package precautionary by @dcnorris.
2021-06-03 20:26:44 +02:00
Markus Triska
581e055359
FIXED: correct propagation of tuples_in/2 ( #929 )
...
Many thanks to @notoria for producing a very short test case.
2021-05-13 21:48:43 +02:00
Markus Triska
38db8d4e1a
FIXED: module qualification for between/3 in goal expansion ( #941 )
...
Many thanks to @dcnorris for reporting this issue!
2021-05-09 23:54:37 +02:00
Markus Triska
30fd99679a
add a new section about support and discussions
2021-04-17 13:45:41 +02:00
Markus Triska
f56e2fc48e
remove rectractall/1 (built-in since 8188e3d0cf).
...
This resolves #899 .
2021-04-14 20:18:50 +02:00
Markus Triska
842176a595
is is --> is
2021-03-05 18:36:00 +01:00
Markus Triska
0fb74b56b3
FIXED: CLP(B): weighted_maximum/3 with repeated variables
...
Many thanks to @jburse for reporting this issue:
https://github.com/triska/clpz/issues/15
Example:
?- sat(~(Y*X)), sat(Z=:=Y), weighted_maximum([7,2,5],[X,Y,Z],W).
W = 7, Y = 0, X = 1, Z = 0
; W = 7, Y = 1, X = 0, Z = 1
; false.
2021-03-05 18:35:19 +01:00
Markus Triska
87abcd6a52
adapt comment to Scryer Prolog
2021-03-05 18:16:38 +01:00
Markus Triska
d92951ba5b
ENHANCED: more readable indentation of nested disjunctions
...
Example:
?- portray_clause((h :- a ; b ; c)).
h :-
( a
; b
; c
).
true.
2021-03-04 21:40:24 +01:00
Markus Triska
c5749cbbb1
remove unnecessary argument
2021-03-04 21:40:24 +01:00
Markus Triska
761d707b69
use the new portray_clause/1 output for generated definitions
2021-03-03 22:34:09 +01:00
Markus Triska
d327a05e12
separate side-effects from declarative description to facilitate test cases etc.
2021-03-03 22:34:09 +01:00
Markus Triska
6477d21e24
ENHANCED: more readable indentation of nested ( If -> Then ; Else ) constructs
...
Example:
?- portray_clause((h :- ( a -> b ; c -> d ; e, f))).
h :-
( a ->
b
; c ->
d
; e,
f
).
true.
2021-03-03 22:34:09 +01:00
Markus Triska
5b60c8aa7e
remove min_/3 and max_/3 which are also defined elsewhere
2021-03-02 19:59:57 +01:00
Markus Triska
8c5a688566
remove group_pairs_by_key/2, which is now provided by library(pairs)
2021-03-02 19:58:20 +01:00
Markus Triska
b77bdabca6
explain the new occurs_check flag
2021-03-01 19:42:16 +01:00
Markus Triska
dd64268bc7
add entry for library(lambda)
2021-02-25 23:12:56 +01:00
Markus Triska
aecbd0eda3
omit internal residual goals for global_cardinality/2
2021-02-25 23:12:36 +01:00
Markus Triska
2c1b7e3b14
remove unused attribute_goal/2
2021-02-25 23:12:36 +01:00
Markus Triska
e0c98a5c79
adapt libraries and toplevel output to Scryer Prolog
2021-02-25 22:08:25 +01:00
Markus Triska
dfb60ec2ed
use individual meta_predicate/1 declarations
2021-02-25 22:08:25 +01:00
Markus Triska
b85e260b92
ADDED: library(lambda) by Ulrich Neumerkel.
...
Source: http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/lambda.pl
More information:
http://www.complang.tuwien.ac.at/ulrich/Prolog-inedit/ISO-Hiord
2021-02-25 22:08:00 +01:00
Markus Triska
b3db8913c6
enable meta_predicate/1 declarations
2021-02-18 20:19:23 +01:00
Markus Triska
5bec2c87cb
add appropriate meta_predicate/1 declarations
2021-02-18 20:15:04 +01:00
Markus Triska
71a524662d
add appropriate meta_predicate/1 declarations
2021-02-18 19:16:11 +01:00
Markus Triska
1bdfc5a1a4
~| now incorporates the number of characters described so far
...
Therefore, subsequent uses of ~N| now yield the specified column,
instead of potentially overshooting.
Example:
?- format("hello~|~t~8|!", []).
hello ! true.
Such cases are probably rather uncommon: Relative positioning with ~N+
is more likely to be used in such cases, and that worked as intended
also previously as it does now:
?- format("hello~|~t~3+!", []).
hello ! true.
In fact, if absolute positions are used, then ~| can be omitted entirely:
?- format("hello~t~8|!", []).
hello ! true.
2021-02-09 20:55:46 +01:00
Markus Triska
d1afcb941f
link to announcement of Rebis Development Branch, call for testing
2021-02-09 19:14:25 +01:00
Markus Triska
a228e46a39
ENHANCED: Enable goal expansion for CLP(ℤ).
...
This is now possible since #445 is resolved.
2021-02-05 21:06:08 +01:00
Markus Triska
81913a5987
Revert "preliminary workaround for #788 "
...
This reverts commit 164b993064 ,
which was made obsolete by 75a52f032b .
2021-02-05 20:59:47 +01:00
Markus Triska
164b993064
preliminary workaround for #788
...
This change can be reverted once the issue is resolved.
2021-02-04 20:48:09 +01:00
Markus Triska
b96ff781bc
add meta_predicate declaration for must_succeed/1
2021-02-03 23:49:28 +01:00
Markus Triska
24e6c31c44
add meta_predicate declaration for with_local_attributes/3
...
This is needed for all_distinct/1 etc.
Example:
?- all_distinct([X,Y,Z]).
clpz:all_distinct([X,Y,Z])
; false.
2021-02-03 23:45:21 +01:00
Markus Triska
ae66e299e6
Use term expansion for generated predicates.
2021-02-03 15:21:39 -07:00
Markus Triska
3796792421
reflect better determinism thanks to #732
2020-12-29 22:24:56 +01:00
Markus Triska
67d856e4b7
reflect determinism improvement thanks to the latest changes
2020-12-23 18:06:35 +01:00
Markus Triska
27a52ef56a
reflect improved determinism thanks to the improvements by @notoria
2020-12-23 00:05:29 +01:00
Markus Triska
1c76c869ef
small documentation improvements related to the new indexing strategy
2020-12-22 21:59:11 +01:00
Markus Triska
5b9f0f45a9
document first instantiated argument indexing
...
Many thanks to @notoria for this brilliant idea and implementation!
2020-12-21 19:58:54 +01:00
Markus Triska
4efbc20a4f
ENHANCED: format_//2, format/[2,3], portray_clause/1 are now deterministic.
...
This works as soon as #732 is merged, since then maplist/N and foldl/N
are deterministic in the required cases.
This also resolves the extra choicepoint of time/1 (see #378 ).
Many thanks to @notoria for implementing better indexing in #732 ,
which allowed me to find this opportunity for improvement!
2020-12-19 18:18:14 +01:00
Markus Triska
41a751e7f5
ADDED: Provisional support for (#=)/3 and (#<)/3.
...
These predicates are intended for constructs from library(reif), such
as if_/3. For the time being, they are defined here. If you have any
recommendations or comments regarding the best location of these
predicates, or need more of them, please file an issue.
Suggested by @Qqwy in https://github.com/triska/clpz/issues/12 .
Many thanks!
2020-11-08 09:26:50 +01:00
Markus Triska
83350f8866
use "r" interactive specifier
2020-10-03 17:13:17 +02:00
Markus Triska
b4ccd889af
refer to new tools directory
2020-10-03 09:59:31 +02:00
Markus Triska
35a3f2dc91
ADDED: showterm.el and showterm.pl to draw terms as trees in Emacs
2020-10-03 09:56:26 +02:00
Markus Triska
2e295e354a
DOC: Development environment recommendations.
2020-10-01 21:15:40 +02:00
Markus Triska
46dfaa5b28
ENHANCED: library(files): Error handling if requested files do not exist.
...
We now throw exceptions instead of failing silently, or even crashing
when using file_size/2 etc. with nonexistent files.
2020-09-13 10:23:23 +02:00
Markus Triska
5f3ab823fd
FIXED: format_//2: Keep different variables distinct.
...
Example:
?- phrase(format_("~w~w", [_,_]), Ls).
%@ Ls = "AB"
%@ ; false.
2020-09-05 09:58:49 +02:00