gpt4 book ai didi

loops - 在 Common Lisp 中循环等效的有序对

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:04 24 4
gpt4 key购买 nike

假设您有一个列表并想要生成所有有序元素对的列表,例如列表是 '(1 3 5 7 9) 并且期望的结果是

((1 . 1) (1 . 3) (1 . 5) (1 . 7) (1 . 9) (3 . 3) (3 . 5) (3 . 7) (3 . 9)
(5 . 5) (5 . 7) (5 . 9) (7 . 7) (7 . 9) (9 . 9))

如果它是 C 中带有索引的数组,则可以将一个 for 嵌套在另一个索引中,并让第二个索引从相应的外部索引开始,即

#include <stdio.h>

int main()
{

int arr[] = {1,3,5,7,9};

for (int i=0; i<5; ++i) {
for (int j = i; j<5; ++j) {
printf("(%d, %d) ", arr[i], arr[j]);
}
}
puts("");

return 0;
}

现在,显然上面只打印了想要的结果。

索引版本应该相当直接地转换为 Common Lisp。

我现在的问题是:for-as-in-list 的惯用 Common Lisp 版本会是什么样子?迭代类型?

我有一些有用的东西,但它看起来有点勉强:

(loop
for cdrs on list
for x in list nconc
(loop
for y in cdrs collect (cons x y)))

最佳答案

这是一个稍微简单的版本:

CL-USER> (loop for x on '(1 3 5 7 9)
nconc (loop for y in x collect (cons (car x) y)))

((1 . 1) (1 . 3) (1 . 5) (1 . 7) (1 . 9) (3 . 3) (3 . 5) (3 . 7) (3 . 9) (5 . 5) (5 . 7) (5 . 9) (7 . 7) (7 . 9) (9 . 9))

关于loops - 在 Common Lisp 中循环等效的有序对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53685303/

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