I appreciate the help I've gotten and hope not to wear out my welcome,
but I'm stuck again. This is probably not the sort of problem for a Oz
newbie like myself to tackle, but it's the one in my path at the
moment. Not sure I can clearly state the problem, but here goes....
If I have an unbound variable (Z) in the last position of a list like say:
X|Y|Z
Then the structure of the variable Z in the tail could theoretically be
any of the following possibilities along an infinite choice of
possibilities:
A|B|C|Z = _|_|_|nil %% Z = nil
A|B|C|Z = _|_|_|_|nil %% Z = _|nil
A|B|C|Z = _|_|_|_|_|nil %% Z = _|_|nil
.... %% Z = _|_|...|nil
And so on. What I'd like is to have a function that generates the
possible choices of the infinite variety of structures that are possible
when an unbound variable is in the last position of the list. Some
example inputs and choice lists follow:
Example Input: A|B|C|Z
choice
A|B|C|nil
[] A|B|C|_<optimized>|nil
[] A|B|C|_<optimized>|_<optimized>|nil
[] A|B|C|_<optimized>|_<optimized>|_<optimized>|nil
....
end
Another Example Input: 1|Z
choice
1|nil
[] 1|_<optimized>|nil
[] 1|_<optimized>|_<optimized>|nil
[] 1|_<optimized>|_<optimized>|_<optimized>|nil
....
end
On the other hand, if the root tail of the list is nil, then the
function just needs to return the list as the function value
Example Input: nil
Output: nil
Example Input: 1|nil
Output: 1|nil
Example Input: 1|2|nil
Output: 1|2|nil and so on....
As a background, this is basically what the Listo function does in
mini-Kanren. Unfortunately, all my feeble attempts to build a recursive
choice list along these lines results in going into a wait state, as the
act of testing the structure seems to bind it at that juncture. What
I'd like is something along the lines of:
fun {Listo L} H T in
if {IsBound L} then
case L
of nil then nil
[] H|T then H|{Listo T}
end
else
choice
L
[] L = H|T
H|{Listo T}
end
end
end
But of course this is pseudo code, so it don't get me very far. I'm not
aware of a IsBound type function in Oz to test whether I'm at the last
position of the list and it's an unbound variable. (And while I'm at
it, is there a name for this last position in the list? Base? Root?)
Thanks,
Chris Rathman
_________________________________________________________________________________
mozart-users mailing list
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users