Prolog查询不会返回所有答案

时间:2019-09-19 13:25:15

标签: prolog swi-prolog

我才刚刚开始学习Prolog,并且在Ubuntu上使用SWI-Prolog。我正在Prolog上观看YouTube教程,其中一个查询返回(无限)正确答案,但是在我的计算机上,同一查询只返回一个看似随机的答案。


代码:t <- data.frame(datetime=c("09/02/2017 15:50:55", "2017-02-09 15:50:55")) t$dt <- ifelse(grepl("\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}:\\d{2}", t$datetime), as.POSIXct(strptime(t$datetime, "%d/%m/%Y %H:%M:%S")), as.POSIXct(strptime(t$datetime, "%Y-%m-%d %H:%M:%S"))) t datetime dt 1 09/02/2017 15:50:55 1486651855 <-- same values for dt, as expected 2 2017-02-09 15:50:55 1486651855

查询:vertical(line(point(X, Y), point(X, Y2)))

预期的教程输出:vertical(line(point(5, 10), X))

实际输出:X = point(5, _ )


要使点X = point(5,6058)X垂直,它的格式必须为(5,10),但我的输出是(5, _ )。第二次我运行查询时,同一命令的输出也不同,然后保持不变。

1 个答案:

答案 0 :(得分:1)

一个自由变量。如果我们对此进行查询,则会获得:

?- vertical(line(point(5, 10), X)).
X = point(5, _3730).

请注意_3730中的下划线。这意味着它是一个变量。如果您引入一个自由变量,则Prolog解释器将为此添加一个数字。如果有多个自由变量,这将很有用,因为它可以清楚地表明哪些变量相同,哪些变量不同。