在阅读了Andreas Zeller的调试书之后,我开始对动态切片感兴趣(http://en.wikipedia.org/wiki/Program_slicing).
目前我只找到了相关的Java分析工具.你知道这样的C/C++工具吗?
我正在寻找一些功能来进行程序切片。例如,假设我有以下代码
print("Starting")
x = 25
prod = x * 20
div = x / 5
Run Code Online (Sandbox Code Playgroud)
当我想要所需的程序切片时,prod切片器应该输出我
x = 25
prod = x * 20
Run Code Online (Sandbox Code Playgroud)
当我想输出程序中依赖于变量 x 的部分时,我应该得到输出
x = 25
prod = x * 20
div = x / 5
Run Code Online (Sandbox Code Playgroud)
我正在查看该工具https://github.com/romanofski/programslice但它没有多大帮助。
提前致谢
我需要找到给定数字的因子,例如:
?- divisors2(40,R).
R = [40,20,10,8,5,4,2,1].
Run Code Online (Sandbox Code Playgroud)
代码 :
% get all the numbers between 1-X
range(I,I,[I]).
range(I,K,[I|L]) :- I < K, I1 is I + 1, range(I1,K,L).
% calc the modulo of each element with the given number :
% any x%y=0 would be considered as part of the answer
divisors1([],[],_).
divisors1([H|T],S,X):-divisors1(T,W,X),Z is X mod H,Z==0,S=[H|W].
divisors1([_|T],S,X):-divisors1(T,S,X).
divisors2(X,Result) :-range(1,X,Result1),divisors1(Result1,Result,X).
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时,divisors2(40,RR).我得到无限循环,并且屏幕上没有任何内容.
为什么?
问候
有没有一种方法可以使用Frama-Cslicing插件为特定的C assert语句计算切片?
例如,给出以下代码:
int main() {
double a=3;
double b=4;
double c=123;
assert(b>=0);
double d=a/b;
c=a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想得到以下切片assert(b>=0);:
int main() {
double b=4;
assert(b>=0);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我是Prolog的新手,正在尝试对选择进行排序。这是我所拥有的:
ssort([],[]).
ssort([M|S],L):-min(M,L),remove(M,L,N),ssort(S,N).
min(M,[M]).
min(M,[H,T]):-min(N,T),min2(M,H,N).
min2(A,A,B):-less(A,B).
min2(B,A,B):-not(less(A,B)).
less(A,B):-(A<B).
append([],B,B).
append([H|A],B,[H|AB]):-append(A,B,AB).
remove(X,L,N):-append(A,[X|B],L),append(A,B,N).
Run Code Online (Sandbox Code Playgroud)
但是当我尝试例如
ssort(S,[5,3,1]),write(S).
Run Code Online (Sandbox Code Playgroud)
false无论如何,我都能理解。您能告诉我如何实际排序列表并将结果写入其中S吗?
我正试图用Prolog解决爱因斯坦之谜.当我试图通过房屋(Hs)运行时,它显示没有.任务是
houses(Hs) :-
length(Hs, 5),
member(h(english,_,_,_,red), Hs),
member(h(swede,dog,_,_,_), Hs),
member(h(_,_,_,coffee,green), Hs),
member(h(dane,_,_,tea,_), Hs),
next(h(_,_,_,_,green), h(_,_,_,_,white), Hs),
member(h(_,bird,'Pall Mall',_,_), Hs),
member(h(_,_,'Dunhill',_,yellow), Hs),
Hs = [_,_,h(_,_,_,milk,_),_,_],
Hs = [h(norwegian,_,_,_,_)|_],
next(h(_,horse,_,_,_), h(_,_,'Dunhill',_,_), Hs),
next(h(_,_,blend,_,_), h(_,cat,_,_,_), Hs),
member(h(_,_,'Blue Master',beer,_), Hs),
member(h(german,_,'Prince',_,_), Hs),
next(h(norwegian,_,_,_,_), h(_,_,_,_,blue), Hs),
next(h(_,_,'Blend',_,_), h(_,_,_,water,_), Hs),
member(h(_,fish,_,_,_), Hs).
next(A, B, Ls) :- append(_, [A,B|_], Ls).
next(A, B, Ls) :- append(_, [B,A|_], Ls).
我不知道出了什么问题.谢谢