如何在Rascal中将“ IO操作”与列表推导或映射器一起使用?

时间:2019-02-07 15:19:34

标签: list io rascal

我想知道IO操作(如println)将返回类型为void的值,然后我们可以在列表理解中或作为mapper函数的参数使用这些操作。但是,当我尝试

rascal> import IO;
rascal> import List; 
rascal> [println(x) | x <- [1,2,3]];

我有一个空指针异常(下面是stacktrace的一部分)。当我尝试

rascal> mapper([1,2,3], println);
1
java.lang.NullPointerException(internal error) at $root$(|main://$root$|)
java.lang.NullPointerException
    at io.usethesource.vallang.impl.fast.ListWriter.updateType(ListWriter.java:76)
    at io.usethesource.vallang.impl.fast.ListWriter.append(ListWriter.java:84)
    at org.rascalmpl.semantics.dynamic.ListComprehensionWriter.append(ListComprehensionWriter.java:38)

当然,虽然我不了解Rascal中此空指针异常的原因,但我确实没有真正期望像将IO操作映射到Haskell中的列表这样的行为。

1 个答案:

答案 0 :(得分:2)

空指针的原因是printf是一个无效函数。在当前实现中,此实现为null指针。您可以改用

for(x <- [1,2,3]) println(x);