gpt4 book ai didi

list-comprehension - 如何对关系进行列表理解?

转载 作者:行者123 更新时间:2023-12-04 16:12:53 25 4
gpt4 key购买 nike

在我的代码中有以下两种方法:

public void AllDivisors(int max) {
lrel[int,list[int]] div = [ <i,d> | int i <- [0 .. max], list[int] d <- GetDivisors(i)];
println("<div>");
}

public list[int] GetDivisors(int n) {
return [ p | p <- [1..n], n % p == 0];
}

第二个 (GetDivisors) 给出 n 的除数列表并将它们作为 list[int] 返回.接下来我想将这些映射到 n 的值上使用 lrel在第一种方法(AllDivisors)中。我试图使用列表推导一次性完成这项工作,但这似乎行不通。

rascal>GetDivisors(10);
list[int]: [1,2,5]

rascal>AllDivisors(10);
|project://Sevo/src/NumberEx.rsc|(189,1,<8,85>,<8,86>): Expected int, but got list[int]
Advice: |http://tutor.rascal-mpl.org/Errors/Static/UnexpectedType/UnexpectedType.html|

我很难弄清楚 Rascal 在哪里期待 int但得到 list[int] .我想它在 d <- GetDivisors(i) 中.如何在我的列表理解中生成正确的元组?

最佳答案

问题的根源是 list[int] d <- GetDivisors(i) .自 GetDivisors返回 list[int]它的元素类型为 int .

所以第一个修复是:int d <- GetDivisors(i) .

但现在您还必须修复 div 的类型进入lrel[int,int] div .

完整的例子变成了:

public void AllDivisors(int max) {

lrel[int,int] div = [ <i,d> | int i <- [0 .. max], int d <- GetDivisors(i)];
println("<div>"); }

public list[int] GetDivisors(int n) {
return [ p | p <- [1..n], n % p == 0]; }

样式说明:我们通常让函数名以小写字母开头。

关于list-comprehension - 如何对关系进行列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47508793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com