GNU Prolog, unstable, Changelog: All, current items.

Conformité syntaxique, number_chars/2.
Installation
./configure --prefix=/opt/gupu --with-c-flags='-O3 -fomit-frame-pointer' && make
Sommaire par rapport de Cor.3 (version officielle).
  1. Traitement de - nécessite quelques crochets rondes ( ) de plus (7.10.5 h 2, #260, #43)
  2. Traitement des options: #103
105: * get vs. read
La convention est Et donc read_line est trompeuse. Il est préférable de dire get_line... Pour get_line_to_chars/2 on a end_of_file, et pour get_line_to_codes/2 on a -1. SO.
v1.5.0-31-gdd3f5ab
v1.5.0-1-g8a8220d
104: *
| ?- repeat, open(.,read,S), writeq(S),nl,fail.
repeat, open(.,read,S), writeq(S),nl,fail.
'$stream'(3)
'$stream'(4)
...
'$stream'(1023)
uncaught exception: error(permission_error(open,source_sink,'.'),open/3)
| ?-
Attendu: resource_error.
103: * regression
ulrich@p0:/opt/gupu/src/gprolog-code$ /opt/gupu/gprolog-1.4.3/bin/gprolog 
GNU Prolog 1.4.3
By Daniel Diaz
Copyright (C) 1999-2012 Daniel Diaz
| ?- VN_list = 42, read_term(T,[variable_names(VN_list)]).
a.

no
| ?- 

ulrich@p0:/opt/gupu/src/gprolog-code$ /opt/gupu/gprolog-1.4.4/bin/gprolog 
GNU Prolog 1.4.4 (64 bits)
Compiled Jan 19 2015, 19:32:14 with gcc
By Daniel Diaz
Copyright (C) 1999-2014 Daniel Diaz
| ?- VN_list = 42, read_term(T,[variable_names(VN_list)]).
uncaught exception: error(domain_error(read_option,variable_names(42)),read_term/2)
Attendu: échec.
102: * erreurs et les options write
| ?- O = alias(_), /**/ open(f,write,_,[O]).
uncaught exception: error(domain_error(stream_option,alias(_30)),open/4)
Attendu: instantiation_error
101: * copy_term/2 inefficace
copy_term/2 n'est pas "inlined", et donc lambda.pl est bien inefficace.
100: * maplist/3 ... maplist/8 inefficace
On peu epargner dans maplist/3 .. maplist/8 entre 1+1*N et 6+6*N instructions, si on remplace:
maplist(P_7,X1s,X2s,X3s,X4s,X5s,X6s,X7s) :-
   maplist_i(X1s,X2s,X3s,X4s,X5s,X6s,X7s,P_7).

maplist_i([],[],[],[],[],[],[],_P_7).
maplist_i([X1|X1s],[X2|X2s],[X3|X3s],[X4|X4s],[X5|X5s],[X6|X6s],[X7|X7s],P_7) :-
   call(P_7,X1,X2,X3,X4,X5,X6,X7),
   maplist_i(X1s,X2s,X3s,X4s,X5s,X6s,X7s,P_7).
par
maplist(P_7,X1s,X2s,X3s,X4s,X5s,X6s,X7s) :-
   maplist_i(X1s,P_7,X2s,X3s,X4s,X5s,X6s,X7s).

maplist_i([],_P_7,[],[],[],[],[],[]).
maplist_i([X1|X1s],P_7,[X2|X2s],[X3|X3s],[X4|X4s],[X5|X5s],[X6|X6s],[X7|X7s]) :-
   call(P_7,X1,X2,X3,X4,X5,X6,X7),
   maplist_i(X1s,P_7,X2s,X3s,X4s,X5s,X6s,X7s).
v1.4.2-git-118-g48ad028
99: * clpfd (div)/2
| ?- X #= -1 div 2.
X #= -1 div 2.
uncaught exception:  error(type_error(fd_evaluable,(div)/2),(#=)/2)
Attendu: X = -1
98: *
Le fichier n98.pl contient des caractères 0 et 1. Attendu: 2 erreurs syntaxiques dans les atomes. ^@ est zero, ^A est un. Seul la première occurrence est acceptable comme caractère décoratif faisant partie de PCS.
$ cat n98.pl
f(1).
^@f(99).

f(2).
g('ab^@cd').

g('ef^Agh').
$ od -c n98.pl
0000000   f   (   1   )   .  \n  \0   f   (   9   9   )   .  \n  \n   f
0000020   (   2   )   .  \n   g   (   '   a   b  \0   c   d   '   )   .
0000040  \n  \n   g   (   '   e   f 001   g   h   '   )   .  \n  \n
0000057
97: * doc de nth0/3
nth0/3 n'est pas documenté. Voici.
95: * length/2 #8
| ?- X #>= 0, length(_,X).
uncaught exception: error(type_error(integer,_#2097954(0..268435455)),(#>=)/2)
Attendu: X = 0 ; X = 1 ; X = 2 ...
94: * term_variables/2 boucle
| ?- L=[_|L], term_variables(L,Vs), L == Vs.
**boucle**
Attendu: échec.
3150141 Dec 17 14:34 gprolog-20141217.tgz
3576496 Dec 12 13:47 gprolog-20141212.tgz (1.4.5)
v1.4.2-git-102-g893705e
93: * iso_dif/2
exemples. L'idee est d'avoir une implantation efficace du prédicat suivant:
iso_dif(X, Y) :-
   X \== Y,
   ( X \= Y -> true
   ; throw(error(instantiation_error,iso_dif/2))
   ).
C'est presque le vrai dif. Et dans les cas difficiles, on met instantiation_error
92: * ensure_loaded/1
La directive 7.4.2.8 ensure_loaded/1 n'existe pas - ce qui est une exigence de la norme.
v1.4.2-git-110-ge9faa37
v1.4.2-git-96-gccaffe1
v1.4.2-git-95-g70553f7
v1.4.2-git-94-g7c4fb38
v1.4.2-git-91-gdb88dc3
v1.4.2-git-87-g0210c7c
v1.4.2-git-87-g0210c7c
On branch negative-domain
90: * Archives GNU
Il est difficile de lire les Archives GNU. Pour SWI, il y a un fichier par an. Mais pour GNU il y a un fichier par mois.
89: * emacs
Comment utiliser GNU dans M-x shell de Emacs? Toutes les requêtes sont dupliquées et on ne peut plus regarder des reponses avec ;
88: * clpfd boucle (quasiment) infinie
| ?- fd_domain([D,E,F],0,1),fd_domain([B],1,2),fd_labeling([B]),B#=2*D*(E-F),B = 2.     
	
B = 2
D = 1
E = 1
F = 0

(88050 ms) yes
86: ! clpfd incomplet
| ?- v(0,0)=v(A,D), fd_domain([A,D],0,1),A#==>0#>0/D,fd_labeling([A,D]), v(0,0)=v(A,D).

A = 0
D = 0

yes
| ?-                fd_domain([A,D],0,1),A#==>0#>0/D,fd_labeling([A,D]), v(0,0)=v(A,D).

no
80: ! imprimer -
Il en reste #260.
76: * manuel
Dans 8.6.1 Evaluation of an arithmetic expression, div et mod n'est sont pas bien definie. Avant tout, il sont les opérations préférées. LIA-1 ne fait pas un mystère. Il faut:

Expression Result = eval(Expression)SignatureISO
E1 // E2tr(x/y) no longer specified by any part of LIA (ISO/IEC 10967)
E1 rem E2... no longer specified by any part of LIA (ISO/IEC 10967)
divx/y⌋ as defined by LIA-1 ISO/IEC 10967-1
modx - (⌊x/y⌋ ⋅ y) as defined by LIA-1 ISO/IEC 10967-1

avec (selon 4.1.3.4) tr(x) = if x ≥ 0 then ⌊x⌋ else -⌊-x

à savoir: integer_rounding_function est toujour toward_zero. Si tu mi ça en question, alors tu n'a que des troubles. Il n'y a aucune implantation Prolog avec down.

71: * format/2,3 incomplete (non-ISO)
| ?- format('**~t~d~20|~n',[10]).
**
uncaught exception: error(domain_error(format_control_sequence,t),format/2)
attendu (B)
| ?- format('**~t~d~20|~n',[10]).
**                10
L'origine de format/2 est Quintus. Et donc SICStus 4
3342745 2013-03-09 16:14 gprolog-20130309.tgz
3358528 2012-12-04 16:21 gprolog-1.4.2.tar.gz
69: *
GNU Prolog 1.4.1
By Daniel Diaz
Copyright (C) 1999-2012 Daniel Diaz
| ?- write_term(V+_,[variable_names(['_18'=V])]).
_18+_18
Pas evident... Peut-être c'est bon comme ça.
3273781 2012-06-29 11:07 gprolog-1.4.1.tar.gz
3280781 2012-06-01 20:05 gprolog-20120601.tgz
3280701 2012-05-31 16:05 gprolog-20120531.tgz
2906740 2012-05-03 16:44 gprolog-20120503.tgz
66: commande Prolog: réponses conditionnelles
| ?- length(Vs,3), fd_domain_bool(Vs), fd_all_different(Vs).

Vs = [_#0(0..1),_#19(0..1),_#38(0..1)]

yes
Attendu: maybe.

Une élaboration sur SO sur ce thème. Donc il est bon de dire yes si il y a au moins une solution, comme:

| ?- length(Vs,3), fd_domain_bool(Vs).

Vs = [_#0(0..1),_#19(0..1),_#38(0..1)]

yes
2906309 2012-04-30 18:23 gprolog-20120430.tgz.1
2906037 2012-04-30 11:02 gprolog-20120430.tgz
61: * template
: term_variables(?term, ?list, ?list).
| ?- term_variables(1,1,1).

yes
Plutôt : term_variables(?term, ?term, ?term).

2+: term_variables/2 est ISO, term_variables/3 est GNU.

2904625 2012-04-26 20:39 gprolog-20120426.tgz #54, #49.
56: * maplist/3 sans indexation
| ?- maplist(=,L,[1,2,3]).
 
L = [1,2,3] ? ;
 
no
Attendu: Aucun point de choix ! SWI, YAP, Jekejeke sont capable de supprimer ce point de choix inutile.

Voici une définition évitant des points de choix:

maplist(_, Xs, Ys) :-
   Xs == [],
   !,
   Ys = [].
maplist(_, Xs, Ys) :-
   Ys == [],
   !,
   Xs = [].
maplist(_, [], []).
maplist(Cont, [X|Xs], [Y|Ys]) :-
   call(Cont, X, Y),
   maplist(Cont, Xs, Ys).
2895003 2012-02-17 10:54 gprolog-20120217.tgz
3242145 2011-11-25 17:12 gprolog-20111125.tgz
47: * min_list/2 &cie.
| ?- X is min(2+0,1+1).

X = 2

yes
| ?- min_list([1+1,2+0],M).

M = 1+1

yes
| ?- min_list([2+0,1+1],M).

M = 2+0
mais selon le manuel: min_list(+list, ?number). 2+ min_list n'utilise pas min/2. (Aussi, le nom n'est pas idéal).
46: * manuel 7.2.2
','(+callable_term, +callable_term). Attendu : goal. Si non, (fail,_) doit donner une erreur.
3239128 2011-06-22 16:50 gprolog-20110622.tgz
45: * representation_error
Selon 8.14.1.3 j il faut une erreur différente :
| ?- catch(read(X),error(E,_),true).
10000000000000000000.

E = syntax_error('user_input:51 (char:1) integer overflow (exceeds max_integer)')
Attendu : representation_error(max_integer) comme B. XSB affiche un "warning" et donne le max_integer. Mais c'est pas tellement claire, comme il n'y a aucune erreur pour les virgules flottantes comme 1.0e1000000 ou 1.0e-1000000.
3239345 2011-06-10 18:44 gprolog-20110610.tgz
3236081 2011-06-09 16:47 gprolog-20110609.tgz
fixe 36 40 41 213
42: * afficher les virgules flottantes
| ?- X = 1.0e120.
X = 9.9999999999999998e+119
C'est bien correcte comme la relecture produit la même valeur, mais il est tellement plus lisible de voir la représentation plus compacte dans SWI où SICStus. Des autres systèmes sauf GNU, SICStus, SWI ne respectent pas la propriété 7.10.5c par. 2.
38: f strict_iso
La sémaphore strict_iso est problématique.
  1. ceiling, floor, round, truncate: c'est une extension autorisée (implementation specific extension selon 5.5.10).
  2. 0'' est une déviation non autorisé
  3. pourquoi veut tu remplacer des indicateurs de prédicats par des buts dans current_predicate/1?

    IF, SWI, YAP, B, SICStus, XSB donnent type_error(predicate_indicator, fail) pour le but current_predicate(fail) seul GNU (strict_iso off) et Ciao échouent.

  4. pas sur de ce que current_predicate/1 demande pour les prédicats prédéfinis et les CC. Mais je suis irrité par 13211-2 6.6.3. Cette procédure est tellement diffèrente de 13211-1 7.7.7. Il faut relire les deux en même temps.
3235949 2011-06-01 17:30 gprolog-20110601.tgz.1
3235922 2011-06-01 15:05 gprolog-20110601.tgz
3232321 2011-05-27 13:32 gprolog-20110527.tgz
3232071 2011-05-23 18:45 gprolog-20110523.tgz
3230062 2011-05-12 13:11 gprolog-20110512.tgz
3206893 2011-04-08 18:43 gprolog-20110408.tgz
3161056 2010-11-30 12:09 gprolog-20101130.tgz
30: * subsumes_term/2 implantation
En ce qui concerne la question de traitement des variables dans la présence de contraintes on a eu une discussion il y a un an. Le résultat intermédiaire est donc le nom plus déclaratif et un essai d'un traitement plus sophistiqué.
3157727 2010-11-26 17:52 gprolog-20101126.tgz
24: * listes infinies
| ?- Xs=[a|Xs],atom_chars(A,Xs).
 
Fatal Error: Segmentation Violation
Attendu: type_error(list,Xs). C'est STO, donc c'est pas normatif.
Au dessous les différences par rapport à des résolutions edimbourgeoises de WG17.
Au dessus les resolutions WG17 à Edimbourgh.
14: * réponse incorrecte
| ?- [user].
compiling user for byte code...
c :- X*Y#=2, X=Y.
 
user compiled, 2 lines read - 374 bytes written, 17165 ms
 
yes
| ?- c.
 
yes
Attendu : Réponse conditionnelle. Par ex. maybe à la place de yes. C'est très confondrant pour les débutants. Ou bien plus détaillé, des prédicats copy_term/3 et call_residue_vars/2.
3136021 2010-06-25 16:09 gprolog-20100625.tgz
13: * conformité ISO 5.1 e
Prolog flag iso avec les valeurs suivants
true
conformité régulière: les extensions spécifiques sont autorisées (défaut).
strict
conformité stricte selon 5.1 e: aucune extension spécifique d'implantation est autorisée
false
modus expérimental
12: * CLPFD
| ?- X=0+0, 0#=X.
 
X = 0+0
 
yes
| ?- 0#=X, X=0+0.
 
no
C'est un problème de tout les solveurs CLPFD. La commutativité n'est pas respectée. En SICStus, la première requête donne une erreur de typage, mais X=0+0, call(0#=X). est un succès. Ceci n'est pas préférable d'un point de vue sémantique. C.a.d échanger une erreur de typage par un succès. En SICStus, maplist(#<(X), Xs) se comporte donc différemment d'un prédicat récursif correspondant. J'aimerai bien d'avoir des contraintes munies des propriétés algébriques. C'est Programmation en logique — et non Programmation sans logique.
11: * CLPFD
| ?- P #= X*X, X = 16384.
 
no
| ?- X = 16384, P #= X*X.
 
P = -268435456
X = 16384
 
yes
Attendu: Selon 13211-1, 7.12.2 f, Representation Error.
3137773 2010-06-24 10:21 gprolog-20100624.tgz Les problèmes persistent. Mon portable est connecté avec le WLAN eduroam. Je ne peut pas autoriser les connexions ssh de l'extérieure à moi.
3135740 2010-06-22 16:13 gprolog-20100622.tgz
3135774 2010-06-21 23:39 gprolog-20100621.tgz
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[TXT]ackerg.pl11-Jul-2023 16:29 799  
[TXT]pow.pl11-Jul-2023 14:49 24  
[TXT]acker.pl09-Jul-2023 20:50 688  
[TXT]N.html08-Jul-2023 18:33 49K 
[TXT]GNU-HEADER.html08-Jul-2023 18:33 49K 
[TXT]n98.pl30-May-2015 22:55 47  
[TXT]a.pl29-May-2015 13:43 47  
[TXT]item77ter.html22-Nov-2013 16:24 4.2K 
[TXT]item77bis.html22-Nov-2013 14:31 16K 
[TXT]item78.html22-Nov-2013 14:30 16K 
[TXT]item77.html22-Nov-2013 14:09 11K 
[TXT]test_subsumes2.pl07-Dec-2010 03:40 1.8K 
[TXT]item8.html23-Jun-2010 16:08 395  
[TXT]item7.html22-Jun-2010 00:19 11K 

Apache/2.2.22 (Debian) DAV/2 mod_fcgid/2.3.6 PHP/5.4.36-0+deb7u3 mod_python/3.3.1 Python/2.7.3 mod_ssl/2.2.22 OpenSSL/1.0.1e mod_perl/2.0.7 Perl/v5.14.2 Server at www.complang.tuwien.ac.at Port 80