Markus Triska
21e5b0ab52
FIXED: meta_predicate/1 declaration for tpartition/4.
...
This addresses #1101 .
2021-11-20 22:37:31 +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
Markus Triska
78656d220b
FIXED: reliably write all characters when using format/3
...
This addresses #693 .
Many thanks to @notoria for a brilliant test case, and the
suggestion of this correction!
2020-09-02 19:29:04 +02:00
Markus Triska
79cb4cd6a5
ADDED: First version of call_nth/2.
...
A thread-safe implementation is possible for example with
'$nb_setarg'/3 (see #390 ).
2020-08-24 19:29:08 +02:00
Markus Triska
cc77ef680d
dif/2: Omit entailed residual goals, if the arguments are not unifiable.
...
This addresses #135 .
2020-08-22 17:50:15 +02:00
Markus Triska
e75ebd9b6e
dif/2: Succeed unconditionally if the arguments are not unifiable.
...
This addresses one part of #135 .
2020-08-22 17:50:15 +02:00
Markus Triska
e185b626bd
FIXED: CLP(B): Delay BDD restriction until after the instantiation.
...
This is necessary to actually take the new value into account.
Example:
?- sat(A*B>=C*D), A=1,B=0,C=1,D=1.
false.
This addresses #670 .
2020-08-12 19:51:25 +02:00
Markus Triska
099d9aaca6
library(sgml): Correctly parse XML leaf nodes that are not text nodes.
...
Example:
?- load_xml("<schemaRef type=\"simple\"/>", Node, []).
Node = [element(schemaRef,[type="simple"],[])].
This is necessary for example to parse XBRL files. See #665 .
2020-08-11 21:20:33 +02:00
Markus Triska
ad8e2ad4f6
omit internal attributes in residual goals when using taut/2
...
Examples:
?- taut(X=:=X,1).
clpb:sat(X=:=X)
; false.
?- taut(X=\=X,0).
clpb:sat(X=:=X)
; false.
2020-08-11 20:49:10 +02:00
Markus Triska
c55cc3c472
ensure proper lengths of key and initialization vector
...
This avoids crashes when using unsuitable lengths.
2020-08-06 23:27:49 +02:00
Markus Triska
674483a4c6
remove entailed constraint
2020-08-06 23:17:08 +02:00
Markus Triska
a16f84560d
use self.deref(...) (see #653 )
2020-08-06 20:12:57 +02:00
Markus Triska
1b4500339e
use atom_argument_to_string
2020-08-06 20:12:23 +02:00
Markus Triska
2d3f1e51ec
shorten, and increase readability
2020-08-05 21:49:46 +02:00
Markus Triska
1c23336cff
use "octet" as a string literal, reducing the number of arguments
2020-08-05 20:21:46 +02:00
Markus Triska
a622ffddfe
ADDED: library(crypto): Support for additional authenticated data (AAD).
...
Additional authenticated data can now be specified with the new
aad(Chars) option for encryption and decryption. It is authenticated,
but not encrypted.
2020-08-05 20:09:07 +02:00
Markus Triska
32c612b747
ADDED: library(crypto): ECDH key exchange over Curve25519 (X25519)
2020-07-29 23:51:11 +02:00
Markus Triska
dcc4b91b35
ENHANCED: flush output for impure I/O (format/[2,3], portray_clause/1 etc.)
...
Without this, we do not get a (timely) prompt in cases like:
?- format("press a key: ", []), get_single_char(C).
whereas for example write/1 already works in such cases:
?- write('press a key: '), get_single_char(C).
press a key:
2020-07-25 09:49:02 +02:00
Markus Triska
928c9c9aad
throw an error if a character cannot be encoded
2020-07-23 00:35:23 +02:00
Markus Triska
4a90f13dee
better error handling for options
2020-07-23 00:27:31 +02:00
Markus Triska
61dddcee3f
use newly available chars_base64/3
2020-07-22 20:35:48 +02:00
Markus Triska
4c510001ce
ADDED: chars_base64/3 for efficient bidirectional Base64 conversion.
2020-07-22 20:35:48 +02:00
Markus Triska
2768beec4c
ADDED: path_segments/2 for portable reasoning about path components.
...
The platform-specific directory separator is taken into account.
The clean representation of segments as a list simplifies reasoning.
2020-07-19 12:32:01 +02:00
Markus Triska
c9a69263b6
DOC: add more links to libraries, and include iso_ext in the enumeration
2020-07-18 08:12:26 +02:00
Markus Triska
17dd9239b6
ADDED: file_creation_time/2 and file_access_time/2.
...
The code can be simplified once if- and while-let-chains are available:
https://github.com/rust-lang/rust/issues/53667
2020-07-17 18:48:39 +02:00
Markus Triska
8668aee7fd
ENHANCED: Reorder fields in time stamps so that (@<)/2 is meaningful.
2020-07-16 23:40:03 +02:00
Markus Triska
4f386b3e5e
ADDED: file_modification_time/2, obtaining a time stamp.
...
This addresses a remaining aspect of #511 .
2020-07-16 23:40:03 +02:00
Markus Triska
0f4667d942
ADDED: path_canonical/2, obtaining the canonical absolute path.
...
This addresses a remaining aspect of #511 .
2020-07-15 20:43:34 +02:00