Я пытаюсь программно добавить ребра на график.
Идея состоит в том, что я заархивирую два потока вершин, и если два последовательных встретятся с некоторыми условиями, я создам грань между ними.
Хотя проблема заключается в сжатии. Я не могу сделать это, чтобы сжать два потока, с одним потоком, продвинутым на одну позицию вперед.
(
g.V().hasLabel("person").
order().by("age")
.as("x")
.local(
union(
select("x"),
select("x") // .skip(1)
).fold()
)
)
==>[v[2],v[2]]
==>[v[1],v[1]]
==>[v[4],v[4]]
==>[v[6],v[6]]
Выше работает. Но когда я раскомментирую часть skip
, я получаю
==>[v[2]]
==>[v[1]]
==>[v[4]]
==>[v[6]]
, но мне нужно:
==>[v[2],v[1]]
==>[v[1],v[4]]
==>[v[4],v[6]]
Я прилагаю следующую часть для справки.
(
g.V().hasLabel("person").
order().by("age")
.as("x")
.local(
union(
select("x"),
select("x")
).fold()
).sideEffect(
project("first", "second")
.by(unfold().limit(1))
.by(unfold().skip(1))
.coalesce(
select("first").out("age_lt").unfold(),
choose(
math("second - first").by("age").is(lt(5)),
addE("age_lt").from(select("first")).to(select("second"))
)
)
).none()
)