Errol a "paranormalis" jelensegrol a magikus sorozatok kapcsan beszeltem,Levente Zsíros <zslevi@gmail.com> writes:
> :- use_module(library(clpfd)).
>
> clpsum(Sum,L,AddStr):-
> clpsum2(L,AddStr),AddStr#=Sum.
>
> clpsum2([H],H).
> clpsum2([H|T],AddStr):-
> clpsum2(T,AddStr2),
> AddStr = H+AddStr2.
>
>
>
> | ?- X in 1..100,Y in 1..100,clpsum(10,[X,Y],A).
> ! Type error in argument 1 of user: #= /2
> ! integer expected, but _76+_77 found
> ! goal: _76+_77#=10
> | ?-
> A clpsum-nak elvileg osszeg korlatot kellene tennie listaban szereplo
> valtozokra (2. kishf-hez kellene).
lasd foliak 68. oldal
(http://cs.bme.hu/~szeredi/oktatas/nlp/nlp09_all-foliak.pdf):
Megjegyzés
Az aritmetikai beépített eljárások megengednek (aritmetikai) struktúrákat
tartalmazó változókat, pl. Kif = S1+S2, ..., Kif =:= 0.
CLPFD-ben ez nem megengedett: Kif=S1+S2, ..., Kif #= 0 ==>
Hiba! Ennek oka: a korlát-kifejtés csak betöltéskor történik meg.
A megoldás a korlát-kifejtési fázis késleltetése: Kif=S1+S2, ...,
call(Kif #= 0).
Tehat itt is a megoldas az, hogy `AddStr#=Sum' helyett a
`call(AddStr#=Sum)' hivast teszed be.
-Peter
_______________________________________________
NHLP-l mailing list
NHLP-l@sziami.cs.bme.hu
http://sziami.cs.bme.hu/mailman/listinfo/nhlp-l