如何翻译剪辑中的C语言循环(do…while)?
假设C语言中的以下代码部分:如何翻译剪辑中的C语言循环(do…while)?,c,clips,C,Clips,假设C语言中的以下代码部分: void function(int n,int x) { int i,j; int max=5; int p[max]; // for example: p[max]={{100,1,100,3,10}}; ... ... for(i=0; i<n; i++) if(i!=x) { j=i; do { j=p[j];
void function(int n,int x)
{
int i,j;
int max=5;
int p[max]; // for example: p[max]={{100,1,100,3,10}};
...
...
for(i=0; i<n; i++)
if(i!=x)
{
j=i;
do
{
j=p[j];
}
while(j!=x);
}
...
}
问题:这是正确的代码吗?欢迎任何帮助。提前感谢。好的,通用的哑巴压倒一切的解决方案:定义一个类似这样的宏(伪代码我从来没有掌握lisp语法的窍门)
我认为您甚至可以跳过中间人,直接将循环嵌入递归扩展,但我只是不知道如何强制它进行尾部递归。Do。。。不直接支持while,但您可以在while主体的末尾放置break语句来实现该功能:
(deffunction function (?n ?x)
(loop-for-count (?i 1 ?n)
(if (!= ?i ?x)
then
(bind ?j ?i)
(while TRUE do
(do-for-all-facts ((?q q))
(and
(= (fact-slot-value ?q line) 1)
(= (fact-slot-value ?q column) ?j)
)
(bind ?j (fact-slot-value ?q value))
)
(if (!= ?j ?x) then (break))
)
)
)
)
对不起,把?q改为?距离你可以感谢你的关心和帮助,莱利先生。谢谢你的建议,约书亚先生。
(defmacro do-while (@test @body) (
(body)
(while (!= ?j ?x) do (body))
))
(deffunction function (?n ?x)
(loop-for-count (?i 1 ?n)
(if (!= ?i ?x)
then
(bind ?j ?i)
(while TRUE do
(do-for-all-facts ((?q q))
(and
(= (fact-slot-value ?q line) 1)
(= (fact-slot-value ?q column) ?j)
)
(bind ?j (fact-slot-value ?q value))
)
(if (!= ?j ?x) then (break))
)
)
)
)