Отношения - это всего лишь специальная форма множеств, поэтому все операции, доступные на наборах, также доступны для отношений. Ваша операция добавления будет фактически
myReln += < "a", 1 >;
или
myReln = myReln + < "a", 1 >;
Удаление элементов из соотношения он похож на добавление элементов отношения. Если вы хотите удалить кортеж < "a", 1>
из myReln
, вы бы просто написать
myReln = myReln - < "a", 1 >;
или, как сокращение
myReln -= < "a", 1 >;
Если вы не знаете, весь кортеж, но знаю, что вы хотите удалить любой кортеж, начинающийся с "a"
, у вас есть (как минимум) два варианта. Проще всего использовать функцию domainX
в Relation
библиотеке:
import Relation;
myReln = domainX(myReln, {"a"});
Это удалит все кортежи, которые имеют "a"
в качестве первого элемента. Вы также можете иметь более одного пункта в этом наборе, так что если вы хотите, чтобы удалить все кортежи, начиная с любой "a"
или "b"
вы могли бы сказать:
myReln = domainX(myReln, {"a","b"});
Другой вариант заключается в использовании по шаблону и постижений - в основном , чтобы восстановить отношение, посмотрев на каждый элемент в отношении и решив, не следует ли его сохранить. Это будет выглядеть так:
myReln = { <a,b> | <a,b> <- myReln, a != "a" };
Модификация - это только некоторые серии дополнений и исправлений. Поскольку отношения неизменны, у нас нет понятия модификации на месте.
Здесь вы можете найти документацию по набору мошенников: http://tutor.rascal-mpl.org/Rascal/Rascal.html#/Rascal/Expressions/Values/Set/Set.html. Специальные операции, определенные только для отношений (опять же, множества кортежей) здесь: http://tutor.rascal-mpl.org/Rascal/Rascal.html#/Rascal/Expressions/Values/Relation/Relation.html
Похоже, вы предполагаете, что данные изменяемы, как в программировании OO. Это не относится к мошеннику. 'myReln' указывает на пустой набор' {} ', который вы не можете изменить. То, что вы делаете, - это сделать новый набор, и пусть «myReln» указывает на это, как объясняет Марк в своем ответе. Надеюсь это поможет! Спасибо за вопрос. – jurgenv