序言将列表存储在变量中
prolog store a list in a variable
prod([[vin(110 "Mercurey", 1978, 13), vin(120, "Macon", 1977, 12)],
[viticulteur("Nicolas","Pouilly","Bourgogne"),
viticulteur("Martin","Bordaux","Bordelais")]], R)
这个谓词正在返回一个列表:
R = [[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")],
[vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")]]
我想将这个列表“R”存储在我程序的一个变量中。我怎样才能做到这一点?我想做的就像:
list = [1, 2, 3] (in Python)
vin6(prod([[vin(110, "Mercurey", 1978, 13), vin(120, "Macon", 1977 , 12)],
[viticulteur("Nicolas", "Pouilly", "Bourgogne"),
viticulteur("Martin", "Bordaux", "Bordelais")]], R))
在你的计划中让它成为事实。
list([1, 2, 3]).
现在您可以随时使用 list(Xs)
统一任何谓词中的变量。
这个:
R = [[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")],
[vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")]]
是有效的序言;当 R
与该列表统一时它成立。例如
test(X) :-
R = [[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")],
[vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")]],
nth1(1, R, X).
然后:
?- test(X).
[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")]
我认为几乎按照 Enigmativity 的建议进行操作可能更正常,而是将数据库用于单个条目而不是列表,如下所示:
wine(vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")).
wine(vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")).
wine(vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")).
wine(vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")).
test(Second) :-
findall((Vin, Viti), wine(Vin, Viti), R),
nth1(2, R, Second).
然后:
?- test(Second).
Second = (vin(110, "Mercurey", 1978, 13),viticulteur("Martin", "Bordaux", "Bordelais"))
prod([[vin(110 "Mercurey", 1978, 13), vin(120, "Macon", 1977, 12)],
[viticulteur("Nicolas","Pouilly","Bourgogne"),
viticulteur("Martin","Bordaux","Bordelais")]], R)
这个谓词正在返回一个列表:
R = [[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")],
[vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")]]
我想将这个列表“R”存储在我程序的一个变量中。我怎样才能做到这一点?我想做的就像:
list = [1, 2, 3] (in Python)
vin6(prod([[vin(110, "Mercurey", 1978, 13), vin(120, "Macon", 1977 , 12)],
[viticulteur("Nicolas", "Pouilly", "Bourgogne"),
viticulteur("Martin", "Bordaux", "Bordelais")]], R))
在你的计划中让它成为事实。
list([1, 2, 3]).
现在您可以随时使用 list(Xs)
统一任何谓词中的变量。
这个:
R = [[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")],
[vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")]]
是有效的序言;当 R
与该列表统一时它成立。例如
test(X) :-
R = [[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")],
[vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")],
[vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")]],
nth1(1, R, X).
然后:
?- test(X).
[vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")]
我认为几乎按照 Enigmativity 的建议进行操作可能更正常,而是将数据库用于单个条目而不是列表,如下所示:
wine(vin(110, "Mercurey", 1978, 13), viticulteur("Nicolas", "Pouilly", "Bourgogne")).
wine(vin(110, "Mercurey", 1978, 13), viticulteur("Martin", "Bordaux", "Bordelais")).
wine(vin(120, "Macon", 1977, 12), viticulteur("Nicolas", "Pouilly", "Bourgogne")).
wine(vin(120, "Macon", 1977, 12), viticulteur("Martin", "Bordaux", "Bordelais")).
test(Second) :-
findall((Vin, Viti), wine(Vin, Viti), R),
nth1(2, R, Second).
然后:
?- test(Second).
Second = (vin(110, "Mercurey", 1978, 13),viticulteur("Martin", "Bordaux", "Bordelais"))