Nested Loops Using Loop Macro in Common Lisp

我是研究僧i 提交于 2020-12-26 09:38:23

问题


I am trying to implement a basic nested loop in CL, but the Loop macro is resisting this. Basically, I would like to find all possible products of 3-digit numbers and accumulate them into a list.

Here is my attempt:

 (loop for x downfrom 999 to 998 do (loop for y downfrom 999 to 998 collect (* x y)))

The code above returns NIL for some reason. By the way, I realize that I only run down to 998, but this is done for testing purposes.

What could I do to obtain a list like this:

(999*999 999*998 ... 998*998 998*997 ... 997*997 997*996 ... 100*100)


回答1:


The COLLECT-clause in the inner loop doesn't affect the outer loop. So the inner loop returns a list of results, but the DO-clause in the outer loop just discards the result. You should use APPEND or NCONC instead of DO. Usually it's better to just stick with APPEND if there are no performance concerns, even if in this case NCONC would be safe.

(loop for x downfrom 999 to 900
      append (loop for y downfrom 999 to 900
                   collect (* x y)))


来源:https://stackoverflow.com/questions/40812080/nested-loops-using-loop-macro-in-common-lisp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!