Невозможно вернуть каждый элемент из набора при его прохождении через цикл for all
Я пытаюсь вернуть каждый элемент из набора, содержащего объекты Brewage, запустив его через цикл for all. Но возвращаемое значение теряется, когда я пытаюсь это сделать.
Функция цикла:
public pure Scan: set of Brewage ==> Brewage
Scan(brewage) ==
for all q in set brewage do
return q
Конструктор пивоварения:
public StringType = seq of char;
public StringLabel = seq of char;
public Char = char;
instance variables
type : StringType;
label : StringLabel;
deposit : Char;
operations
public Brewage: StringType * StringLabel * Char ==> Brewage
Brewage(ty, la, de) ==
( type := ty;
label := la;
deposit := de
);
Ошибка, которую я получаю, связана с функцией сканирования и выглядит следующим образом:
Операция возвращает пустое значение. Фактически: (() | Brewage) Ожидается: Brewage
1 ответ
Вы можете использовать привязку let, чтобы выбрать Brewage в наборе, а затем вернуть его:
public pure Scan: set of Brewage ==> Brewage
Scan(brewage) == let b in set brewage in return b;
public main: ()==>Brewage
main()==
(
let s = { new Brewage(), new Brewage() } in
return Scan(s);
);