我才刚刚开始学习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, _ )
。第二次我运行查询时,同一命令的输出也不同,然后保持不变。
答案 0 :(得分:1)
是一个自由变量。如果我们对此进行查询,则会获得:
?- vertical(line(point(5, 10), X)).
X = point(5, _3730).
请注意_3730
中的下划线。这意味着它是一个变量。如果您引入一个自由变量,则Prolog解释器将为此添加一个数字。如果有多个自由变量,这将很有用,因为它可以清楚地表明哪些变量相同,哪些变量不同。