2009/4/29 Peter Szeredi <szeredi@cs.bme.hu>
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).

Errol a "paranormalis" jelensegrol a magikus sorozatok kapcsan beszeltem,
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


Köszönöm, most már működik.
--

Zsíros Levente