我尝试编写一个谓词过滤器/ 3
示例filter([a,a,b,c,d,d],[a,d],L)
和L与[b,c]统一
我已经写了一个delete / 3谓词,并将其用于过滤器
delete([],_,[]).
delete([A|X],E,Z) :- A==E, delete(X,E,Z).
delete([A|X],E,[A|Z]) :- A \== E, delete(X,E,Z).
filter(M,[],M).
filter([K|M],[E|N],Z) :- delete([K|M],E,Z), filter(Z,N,B).
删除工作正常,但过滤不佳,例如带有跟踪的示例
filtre([1,1,3,7,7],[1,7],Z).
跟踪的最后一行是:
N-3 Call: (10) filtre([3], [], _18304470) ? creep
N-2 Exit: (10) filtre([3], [], [3]) ? creep
N-1 Exit: (9) filtre([3, 7, 7], [7], [3]) ? creep
N Exit: (8) filtre([1, 1, 3, 7, 7], [1, 7], [3, 7, 7]) ? creep
N-3和N-2行我看到序言找到正确的结果,但是他返回[3,7,7]而不是[3],我不明白为什么他不停在N-2行。
答案 0 :(得分:0)
运行代码,首先要获得的是const { fabric } = require("fabric");
const canvas = new fabric.Canvas(null, {width: 500, height: 500});
const fs = require("fs");
const stream = canvas.createPNGStream();
const out = fs.createWriteStream("test.png");
var text = new fabric.Text("Hello world", {
left: 100,
top: 100,
fill: "#f55",
angle: 15
});
canvas.add(text);
canvas.renderAll();
stream.on('data', function(chunk) {
out.write(chunk);
});
。通常,单例变量指示逻辑错误,因为从不使用这些变量。在这种情况下,程序不会返回正确的结果,因为首先您应该在列表Singleton variables: [B]
上调用delete([K|M],E,Z1)
,然后以这种方式Z1
再次调用过滤器