gpt4 book ai didi

ats - 如何在 ATS 中构建二维数组?

转载 作者:行者123 更新时间:2023-12-04 17:55:57 24 4
gpt4 key购买 nike

例如,我正在 ATS 中寻找一个示例,该示例或多或少地执行以下 C 代码的功能:

int *theMultable[10][10];

void
theMultable_initialize()
{
int i, j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++) theMultable[i][j] := i * j;
}
return;
}

最佳答案

一种可能的方法是尝试直接转换为 C。但是,我现在认为我应该使用内置 matrix改为键入。这段代码依赖于相当多的高级功能(我什至留下了一个未经证实的引理供练习:它显示 N*sizeof(T) == sizeof(@[T][N])

初始化二维数组的循环在函数中实现:

extern
fun
multable_init (
mat: &(@[@[int][10]][10])? >> _
): void // end of [multable_init]

这个函数又使用两个函数(基本上都是初始化一个元素数组)。此外,全局变量 multable被分配,然后使用 multable_init 初始化(我以为这行不通,但确实如此!)。

下面是全局变量的初始化代码:
var multable : @[int?][100]
val p_multable = addr@multable
prval pf_multable = array_v_group (view@multable)
val () = multable_init (!p_multable)
prval pf_multable = array_v_ungroup (pf_multable)
prval pf_multable = array2matrix_v (pf_multable)
val theMultable = ref_make_viewptr {matrix (int, 10, 10)} (pf_multable | p_multable)

在栈上分配一个可变数组,然后我们取它的地址(第 2 行),将其对应的 at-proof 从 @[int?][100]@[@[int?][10]][10] (通过第 3 行的分组),并初始化它。然后,我们将分组数组 View 转换为矩阵 View ,最后将其放入引用单元格中。

完整代码在 Glot.io

关于ats - 如何在 ATS 中构建二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40372910/

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