小编Fat*_*ize的帖子

如何实现not_all_equal/1谓词

如何实现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)

在这个例子中,只有第一个答案应该出来,另外两个答案是多余的.

predicate list prolog prolog-dif logical-purity

5
推荐指数
2
解决办法
148
查看次数

从终端查询不打印任何内容

在命令行中运行时,

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终端中使用。

command-line prolog swi-prolog

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

positive_integer/1谓词适用于大数字

在我的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 …

integer prolog clpfd

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

修改数组的一行

我刚刚开始学习 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 语法我实际上可以保留顶行和底行并且仅适用|.于中间行。

更一般地说,您将如何|.仅应用每隔一行?

j

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

绘制颜色取决于具有ggplot的类别的时间序列

考虑这个最小的工作示例:

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根据文档应该做什么).

如何绘制以下内容:

在此输入图像描述

r ggplot2

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