У меня есть бесконечный список сущностей, сгенерированный таким образом:
entities =
let f x = x ++ "'"
in "x" : "y" : "z" : map f entities
Я хотел бы определить функцию, которая возвращает новую сущность при каждом вызове.Например:
> nextEntity
x
> nextEntity
y
.
.
.
Полагаю, это место для Государственной монады, но я буду благодарен за указатели.
Подводный итог.вам нужны именованные переменные для ваших сущностей.«Джон любит Мэри» нужны две переменные (одна для Джона и одна для Мэри), «Джон дает Мэри книгу» нужны три переменные (Джон, Мэри, книга) и т. Д. Мне нужен здесь метод генерации новогоимя переменной для каждой «вещи», с которой я сталкиваюсь при обработке предложений.
Поэтому функция, которую я хочу использовать, должна отслеживать, какая из них уже сгенерирована, и при вызове возвращать следующую.