我试图将添加到ADT中的列表,如下所示:

data MyADT = myadt(list[str] s); 
m = myadt([]);
m.s += "test";

这会导致错误:

|prompt:///|(0,3,<1,0>,<1,3>): Expected list[str], but got str
?[Advice](http://tutor.rascal-mpl.org/Errors/Static/UnexpectedType/UnexpectedType.html)

这似乎应该工作,因为这可以工作:

x = [];
x += "test";

也许我在这里缺少什么?

谢谢!

#1楼 票数:1 已采纳

请尝试以下解决方法:

rascal>m.s += ["test"];
MyADT: myadt(["test"])

看起来像个错误。

顺便说一下,我们将消除+的重载以添加元素和连接列表,并引入一个特殊的运算符来添加元素。 像现在这样令人困惑。

  ask by josh translate from so

未解决问题?本站智能推荐:

1回复

确定乱码中ADT的特殊构造方法

问题如下: 例如,如何指定条件来确定e1和e2的类型并采取措施,
1回复

ADT和值

在Rascal中,说我有代码: 有一种方法可以调用con(x),而x是一个值(但实际上是一个整数),而无需事先知道con的第一个参数的类型应该是什么(因此无需将其显式转换为int)? 为什么可以调用一个函数,比如说int something(int n)= n,并将定义为一个值(例
2回复

哪个替代方案是 ADT 的实例?

我已经定义了一个 AlgebraicDataType 和它的一个实例: 我需要一个布尔值来指示它的给定实例是否为add类型: 也许它存在一个内置函数或运算符,这将是一个比以下更通用的解决方案:
1回复

在ADT替代方案的开头,“ \\”是什么意思?

来自http://tutor.rascal-mpl.org/Rascal/Libraries/lang/java/m3/TypeSymbol/Bound/Bound.html : 所有替代项都以\\开头的原因有什么具体原因吗? 这是什么意思? 这是某种约定还是特殊的Rascal语法?
1回复

当将列表追加到列表列表时,Rascal会删除类型信息

我有以下功能: 但是,当我运行此函数时,将得到以下输出: 当我单击该消息时,它指向代码中的返回值( dupList )。 似乎增加了finalizedDups[dup]会删除list[loc]的类型( list[loc] )。 这应该不可能吗? 为了完整起见,下面是整个
1回复

在Rascal中使用“父”标签注释ADT /节点树

我想创建一个树(使用Node或ADT ),其中每个节点都有一个指向其父节点的注释。 下面是一个简单链表数据结构的示例: 执行addParentAnnotations(linkedList)产生以下结果:
1回复

从列表和/或集合中删除元素

我遇到的情况是,我使用“专用”作用域标识符定义了几个模块级实例变量。 我需要这样做,因为这些变量将在模块中的多个函数中使用。 另外,其中一些变量是“列表”或“集合”。 我意识到这些变量的值在模块中重复调用某个函数之间仍然存在。 这是预期的。 我还在创建一个测试,在其中我反复调用其中
1回复

Rascal中的列表模式匹配

在Haskell(和Prolog / Erlang中非常相似)中,我们可以在列表上定义一个长度函数: 在Rascal中,我可以使用以下方式创建一个定义: “ *”消失在递归长度的右手边。 我知道这可能是其原因,但我无法弄清楚。 是否有更好的方法在Rascal中使用模式匹配在列