3 questions on FD.distribute generic
Raphael Collet
raph at info.ucl.ac.be
Tue Dec 14 08:58:27 CET 2004
Yonet wrote:
>
> I like to customize the behavior of FD.distribute using the generic option.
> I like to implement my own value selection function. The following function
> works as it is.
>
> {FD.distribute generic(order: size
> filter: undet
> select: id
> value: fun {$ V}
> DomSize = {FD.reflect.size V}
> CurDomain = {FD.reflect.domList V}
> Ref = {List.nth CurDomain 1}
> Sel
> % LStdOut = {New Open.file init(name:stdout
> % flags:[write append]
> % mode: mode(owner: [read write]
> % group: [read write]))}
> in
>
> % {LStdOut write(vs:"DomSize: "#DomSize#"\n")}
> if DomSize > 1 then
> Sel = {FD.reflect.nextLarger V Ref}
> else
> Sel = {FD.reflect.min V}
> end
> % {LStdOut write(vs:"Sel: "#Sel#"\n")}
> % {LStdOut close}
> Sel
> end
> procedure: unit)
> Start}
Side remark: have you noticed that your function can be simplified, and
defined (without debugging) as
fun {GetValue V}
{FD.reflect.nextLarger V {FD.reflect.min V}}
end
> Here are my questions:
>
> 1) Whenever, I want to call a function inside this selection function the
> execution stalls when the search starts. Does it mean that I cannot use any
> global variables (local to the .OZ file) in this function?
Your function is called inside a computation space (because of search).
Side effects are normally forbidden inside computation spaces. Writing
to a file is a side effect. However there is one exception to the rule:
you can send data on a port outside the space. The procedure Show
internally uses a port, so you can print debugging information with
Show.
> 2) Why does the OZ debugger stop inside this function, although the debugger
> does not complain when I set breakpoints?
Ozcar does not interrupt code inside computation spaces.
> 3) Why does the function stall when I un-comment the lines to display what
> is going on inside the function (like printf s in C)? Since the breakpoint
> do not work, I wanted to print local variables.
The same reason as above (side effects). Actually you should get an
execution error. Use Show instead.
Cheers,
raph
More information about the mozart-users
mailing list