如何在Mozart / Oz中创建非数字约束?

我想实现一个CSP,变量'domain是非数字的(类似于[lisa ann mary joanna])。有没有办法在莫扎特/奥兹实现这一目标?     
已邀请:
有可能在C ++中实现诸如语言扩展之类的东西,但在语言本身内,这是不可能的。 唯一内置类型的约束是有限域约束(非负整数),有限集约束(对非负整数集的域的约束)和记录约束。 也许您可以使用整数常量来模拟您的问题,例如
declare
  %% 4 constants
  Lisa = 1
  Ann = 2
  Mary = 3
  Joanna = 4

  %% N will be the constrained variable
  N
in
  N::[Lisa Ann Mary Joanna]
  {Show N}   %% displays N{1#4}, i.e. N is between 1 and 4

  N =: Mary %% tell: N is not Mary
  {Show N}   %% displays N{1 2 4}, i.e. N is one of 1,2,4
如果您不想使用有限域,那么逻辑编程就更为笼统。您可以为变量的不同可能值创建选择点,例如:
declare

  proc {Script A}
     A =
     choice
        lisa
     [] ann
     [] mary
     [] joanna
     end
  end

  {Show {SearchOne Script}}  %% displays "[lisa]"
  {Show {SearchAll Script}}  %% displays "[lisa ann mary joanna]"
使用组合器也可以使用非静态已知数量的值来完成此操作。     

要回复问题请先登录注册