Учитывая эту программу, почему я вынужден определять каждый атом в предикате, даже если они анонимны. Почему неопределенные переменные в предикате dict не считаются анонимными?Соответствие предиката Prolog dict
funt2(X) :-
X = point{x:5, y:6}.
evalfunt(point{x:5, y : 6}) :-
write('hello world!').
evalfunt(point{x:_, y : _}) :-
write('GoodBye world!').
Почему я не могу просто сказать
evalfunt(point{x:5}) :-
write('GoodBye world!').
^, что не будет соответствовать, кстати.
Я могу просто использовать структуру, если мне нужно определить все возможные значения в dict для использования dicts.
Какая мотивация здесь? Могу ли я сделать что-то, чтобы сделать мой предикат кратким? Я пытаюсь определить dict с 30 переменными, и это огромный дорожный блок. Это увеличит размер моей программы на величину, если мне придется определять каждую переменную (анонимно или нет).
Я не уверен, что я понимаю этот вопрос, но я думаю, что главная проблема здесь является понимание того, что 'dict' это просто сложный тип данных, как кортеж, который имеет данные и структуру. Если у вас есть, например, два факта «факт» (точка {x: 5, y: 6)). 'И' fact (point {x: 5}). ', То запрос' fact (point {x: _}). 'будет соответствовать второй, но не первой. И запрос 'fact (point {x: _, y: _}).' Будет соответствовать первому, но не второму. –
Проблема заключается в определении каждого поля в dict, чтобы определить соответствующий предикат. Почему это? Если все, о чем вы заботитесь, это значение X, равное 5, то почему вы должны писать y: _ ... + КАЖДЫЙ другой член в dict –
Потому что, если вы их не пишете, он потенциально будет соответствовать dict's с другой структурой. –