1

我想实现一个变量域为非数字的 CSP(类似于 [lisa ann mary joanna] )。有没有办法在 Mozart/Oz 中实现这一点?

4

1 回答 1

2

在 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]"

也可以使用Combinators使用静态未知数量的值来做到这一点。

于 2011-03-03T14:50:54.013 回答