如何实现not_all_equal/1谓词,如果给定列表包含至少2个不同的元素,则谓词成功,否则失败?
这是我的尝试(不是很纯粹):
not_all_equal(L) :-
( member(H1, L), member(H2, L), H1 \= H2 -> true
; list_to_set(L, S),
not_all_equal_(S)
).
not_all_equal_([H|T]) :-
( member(H1, T), dif(H, H1)
; not_all_equal_(T)
).
Run Code Online (Sandbox Code Playgroud)
然而,这并不总是具有最佳行为:
?- not_all_equal([A,B,C]), A = a, B = b.
A = a,
B = b ;
A = a,
B = b,
dif(a, C) ;
A = a,
B = b,
dif(b, C) ;
false.
Run Code Online (Sandbox Code Playgroud)
在这个例子中,只有第一个答案应该出来,另外两个答案是多余的.
在命令行中运行时,
swipl -g "write(42)" -t "halt"
Run Code Online (Sandbox Code Playgroud)
STDOUT按预期打印42 。
但是这个
swipl -g "X = 42" -t "halt"
Run Code Online (Sandbox Code Playgroud)
不打印任何内容,仅返回。
如何获得它以打印在REPL中打印的内容(即X = 42)?
注意:这在Windows终端中。让我知道这是否真的可以在Linux终端中使用。
在我的Prolog启发语言Brachylog中,有可能标记具有潜在无限域的CLP(FD)等价变量.可以在此处找到执行此标注的代码(感谢Markus Triska @mat).
此谓词需要存在谓词positive_integer/1,该谓词必须具有以下行为:
?- positive_integer(X).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
…
Run Code Online (Sandbox Code Playgroud)
这在我们当前的解决方案中实现:
positive_integer(N) :- length([_|_], N).
Run Code Online (Sandbox Code Playgroud)
这有两个我可以看到的问题:
这会很快变慢:
?- time(positive_integer(100000)).
% 5 inferences, 0.000 CPU in 0.001 seconds (0% CPU, Infinite Lips)
?- time(positive_integer(1000000)).
% 5 inferences, 0.000 CPU in 0.008 seconds (0% CPU, Infinite Lips)
?- time(positive_integer(10000000)).
% 5 inferences, 0.062 CPU in 0.075 seconds (83% CPU, 80 Lips)
Run Code Online (Sandbox Code Playgroud)这最终Out …
我刚刚开始学习 J,有些事情我不知道该怎么做
例如,假设我想打印一个包含 2 个符号的棋盘格
baba
abab
baba
Run Code Online (Sandbox Code Playgroud)
为此,我假设您可以生成一个数组
baba
baba
baba
Run Code Online (Sandbox Code Playgroud)
并反转第二行。
生成所述阵列易于:3 4 $ 'ba'。但是倒车第二排是我挣扎的地方。
我可以得到第二行的相反结果,|. 1 { 3 4 $ 'ba'但这只会给我第二行,而不是整个数组。我不知道如何使用 J 语法我实际上可以保留顶行和底行并且仅适用|.于中间行。
更一般地说,您将如何|.仅应用每隔一行?
考虑这个最小的工作示例:
library(ggplot2)
x <- c(1,2,3,4,5,6)
y <- c(3,2,5,1,3,1)
data <- data.frame(x,y)
pClass <- c(0,1,1,2,2,0)
plottedGraph <- ggplot(data, aes(x = x, y = y, colour = factor(pClass))) + geom_line()
print(plottedGraph)
Run Code Online (Sandbox Code Playgroud)
我有一个时间序列y = f(x)其中x是一个时间步长.每个时间步应该有一个颜色,它取决于时间步的类别,记录在pClass中.
这是它给出的结果:
它对我来说没有任何意义,为什么ggplot将相同颜色的点连接在一起而不是相互跟随的点(geom_line根据文档应该做什么).
如何绘制以下内容:
prolog ×3
clpfd ×1
command-line ×1
ggplot2 ×1
integer ×1
j ×1
list ×1
predicate ×1
prolog-dif ×1
r ×1
swi-prolog ×1