Markus Triska
102adb3544
ADDED: "a" to enumerate all solutions
...
Example:
?- member(X, "hello").
%@ X = h <-- press "a"
%@ ; X = e
%@ ; X = l
%@ ; X = l
%@ ; X = o
%@ ; false.
2022-03-01 23:52:51 +01:00
Markus Triska
1bec1b7002
FIXED: load_html/3: use str_loc_as_cell! to store attribute structures
2022-03-01 20:21:08 +01:00
Markus Triska
8fb673e93e
use newly available get_n_chars/3 from library(charsio)
2022-02-23 00:03:36 +01:00
Markus Triska
d1372d9b3b
FIXED: library(sgml): load_html/3 and load_xml/3 now both work again.
...
This addresses #1249 .
2022-02-23 00:03:27 +01:00
Markus Triska
2e57789d10
ENHANCED: Make toplevel output a Prolog term that can be read back also for "...".
...
This addresses #1240 .
2022-01-28 18:47:55 +01:00
Markus Triska
b703303dd4
omit module prefix, because the goals are already module-qualified
2022-01-20 00:48:30 +01:00
Markus Triska
0da9d1c036
ENHANCED: more specific warning when initialization/1 fails ( #1149 )
2022-01-20 00:04:09 +01:00
Markus Triska
6a610ac57d
FIXED: toplevel to use (newly renamed) read_from_chars/2
2022-01-18 01:12:47 +01:00
Markus Triska
516ed1fd5b
ENHANCED: library(crypto): Retain a compact internal representation of the ciphertext throughout decryption.
...
This allows efficient decryption also of very large files and long
strings.
It is usually highly advisable to stick to common and portable library
predicates such as append/3. However, since append/3 does not yet
recognize this opportunity for improvement, I apply it manually in
this case, so that also very large files can be efficiently decrypted
using the compact internal string representation.
Without this change, decrypting a 1 GB file takes 48 GB of RAM,
whereas with this change, it only takes 2 GB (one for the string, one
for its copy with the appended tag).
2022-01-17 23:02:56 +01:00
Markus Triska
23adfef281
MODIFIED: library(charsio): read_n_chars/3 is now called get_n_chars/3
...
This is because "read" is associated with general Prolog terms.
2022-01-17 20:37:55 +01:00
Markus Triska
20b6816562
MODIFIED: library(charsio): read_term_from_chars/2 is now called read_from_chars/2
...
This is for compatibility with SICStus Prolog and GNU Prolog.
2022-01-17 20:21:18 +01:00
Markus Triska
177c98fa95
correct reference to '$working_directory'/2
2022-01-16 23:20:43 +01:00
Markus Triska
11d504e8f4
retain the string "[]" as is, instead of converting it to '[]' (i.e., "")
...
This addresses #1215 .
2022-01-16 17:50:20 +01:00
Markus Triska
cfbb05fb1b
deterministic --> semi-deterministic
2022-01-12 21:58:23 +01:00
Markus Triska
2889a4438b
ADDED: format specifier ~NL to limit the number of digits per line
...
Example:
%?- format("~65L", [2^1000]).
%@ 10715086071862673209484250490600018105614048117055336074437503883_
%@ 70351051124936122493198378815695858127594672917553146825187145285_
%@ 69231404359845775746985748039345677748242309854210746050623711418_
%@ 77954182153046474983581941267398767559165543946077062914571196477_
%@ 686542167660429831652624386837205668069376 true.
2022-01-10 17:52:42 +01:00
Markus Triska
f5952088e3
ADDED: format specifier ~NU, using underscores to separate groups of digits
...
Example:
?- format("~2U", [10^12]).
%@ 10_000_000_000.00 true.
2022-01-10 16:07:05 +01:00
Markus Triska
57d15936cb
ENHANCED: Use newly available fast chars test from library(error).
2021-12-12 17:43:17 +01:00
Markus Triska
12c561cee0
report time with "s" instead of "seconds", in analogy to time(1)
...
This addresses https://github.com/mthom/scryer-prolog/pull/1131#issuecomment-988670049 .
2021-12-08 16:13:54 +01:00
Markus Triska
f79b8a1ca5
ENHANCED: support full layout text sequence (also comments) in integers with underscores
...
Example:
?- X = 1_/**/2.
%@ X = 12.
Following the comment in https://github.com/mthom/scryer-prolog/pull/1112#issuecomment-981540485
2021-12-08 10:42:19 +01:00
Markus Triska
637daa5bda
remove redundant test: '\n' is a layout char.
2021-12-08 10:37:37 +01:00
Markus Triska
dc5e935ecd
use newly available predicates from library(tls) for HTTPS
2021-12-05 18:16:47 +01:00
Markus Triska
538085169a
ADDED: library(tls), providing all predicates for TLS connections.
...
The currently available predicates for TLS-connections can be extended
with predicates to load and reason about certificates etc.
2021-12-05 18:16:47 +01:00
Markus Triska
7e8a635e7e
implement tls_client_negotiate/3 for explicit negotiation
2021-12-05 17:39:22 +01:00
Markus Triska
74e76b6f97
MODIFIED: Remove TLS-related predicates from library(sockets).
...
They will become available in a new library, library(tls).
2021-12-05 17:39:22 +01:00
Markus Triska
cb6309d370
walltime --> CPU time
2021-12-05 00:56:16 +01:00
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
48cea6efdf
FIXED: retract/1 issues due to module qualification
...
This addresses #1125 .
2021-12-01 21:46:12 +01:00
Markus Triska
89a90d9522
ENHANCED: Better reporting for time/1.
...
This addresses #378 .
2021-12-01 21:23:00 +01:00
Markus Triska
0026f3fdef
use anonymous variable
2021-12-01 20:54:06 +01:00
Markus Triska
ee054fd99c
several corrections to test cases
2021-12-01 19:45:36 +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