SWI-Prolog версии 8.0.3 для x64-win64, используя yall
для лямбд. (use_module(library(yall)).
)
Попытка получить доступ к значению в dict в labmda приводит к ошибке. Я думаю, что это меньше проблема с yall
, а больше проблема с диктовками в ... давайте назовем их «цель-значение», потому что я не уверен в правильности термина. (Например, X = (Y = 1)
.) Примером моей реальной проблемы будет ?- L = [S]>>(S=a{x:_},S.x = 10).
, но я приведу более простой пример для начала.
Рассмотрим:
?- L = (S=a{x:_},S.x = 10).
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [11] throw(error(instantiation_error,_11412))
ERROR: [8] '<meta-call>'(user:(...,...)) <foreign>
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
вместо этого я ожидал бы что-то вроде следующего:
?- L = (S=a{x:_},S.x = 10).
L = (S=a{x:_14168}, S.x=10).
Возвращаясь к лямбдам, обратите внимание, что мое намерение может быть выполнено, например,
?- L = [S]>>(S=a{x:_},(.(S,x,10))).
L = [S]>>(S=a{x:_8692}, '.'(S, x, 10)).
Этопросто ужасно(Вызов этой лямбды дает S = a{x:10}
, как и ожидалось.)
Это похоже на ошибку в SWI-Prolog или, по крайней мере, недокументированное ограничение. Я что-то пропустил или я должен сообщить об ошибке?