首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Mozart/Oz中创建非数字约束?

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

Stack Overflow用户
提问于 2011-03-03 01:47:45
回答 1查看 362关注 0票数 1

我想实现一个CSP,变量的域是非数字的(就像lisa ann mary joanna那样)。在莫扎特/《绿野仙踪》中有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-03 22:50:54

在C++中实现语言扩展是可能的,但在语言本身中,这是不可能的。

唯一内置的约束类型是有限域约束(非负整数)、有限集约束(在非负整数集的域上的约束)和记录约束。

也许你可以使用整数常量来模拟你的问题,例如

代码语言:javascript
复制
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

如果你不想处理有限域,有一种更通用的逻辑编程思想。您可以为变量的不同可能值创建选择点,例如:

代码语言:javascript
复制
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对非静态已知数量的值执行此操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5171340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档