标签: program-slicing

C/C++中的动态切片

在阅读了Andreas Zeller的调试书之后,我开始对动态切片感兴趣(http://en.wikipedia.org/wiki/Program_slicing).

目前我只找到了相关的Java分析工具.你知道这样的C/C++工具吗?

c++ program-slicing

13
推荐指数
1
解决办法
1924
查看次数

python 中的程序切片

我正在寻找一些功能来进行程序切片。例如,假设我有以下代码

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但它没有多大帮助。

提前致谢

python program-slicing

6
推荐指数
0
解决办法
515
查看次数

Prolog - 得到给定数字的因素不会停止?

我需要找到给定数字的因子,例如:

?- 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).我得到无限循环,并且屏幕上没有任何内容.

为什么?

问候

prolog failure-slice program-slicing

4
推荐指数
1
解决办法
1427
查看次数

Frama-C:获取C断言语句的切片

有没有一种方法可以使用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)

frama-c program-slicing

3
推荐指数
1
解决办法
169
查看次数

选择在序言中排序

我是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 program-slicing

3
推荐指数
1
解决办法
1346
查看次数

爱因斯坦之谜使用Prolog

我正试图用Prolog解决爱因斯坦之谜.当我试图通过房屋(Hs)运行时,它显示没有.任务是

  1. 英国人住在红房子里.
  2. 瑞典人将狗作为宠物.
  3. 丹麦人喝茶.
  4. 温室位于白宫的左侧.
  5. 温室的主人喝咖啡.
  6. 吸烟Pall Mall的老板饲养鸟类.
  7. 黄屋的主人吸烟了登喜路.
  8. 住在中心的老板喝牛奶.
  9. 挪威人居住在第一所房子里.
  10. 抽吸混合物的主人生活在养猫的旁边.
  11. 保持马的主人住在吸烟者的旁边.
  12. 吸烟的主人喝啤酒.
  13. 德国人抽烟王子.
  14. 挪威人住在蓝屋旁边.
  15. 抽吸混合物的主人生活在喝水的人旁边.
    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).

我不知道出了什么问题.谢谢

prolog program-slicing zebra-puzzle

2
推荐指数
1
解决办法
417
查看次数