#string #netlogo
#строка #netlogo
Вопрос:
Я пытаюсь объединить некоторые символы в строку, а затем выполнить некоторую условную логику с результатом, но вместо ожидаемого «ABC» я получаю «[A] [B] [C]». Как я могу этого избежать?
Код:
let first [basetype] of nukleotider-here with [attached]
let second [basetype] of nukleotider-on patch-at 1 0
let third [basetype] of nukleotider-on patch-at 2 0
let kombination (word first second third)
if kombination = "ABC" [set looking-for "M"]
Спасибо,
Palle
Ответ №1:
Во-первых, first
это зарезервированный примитив NetLogo, но я предполагаю, что вы перевели свой код на английский с целью размещения его здесь (спасибо!) В любом случае, я собираюсь предположить, что ваши переменные называются x1
, x2
и x3
вместо first
, second
и third
.
Ваша проблема связана с тем фактом, что репортеры nukleotider-here
и nukleotider-on
предоставляют вам набор агентов вместо одного агента. Следовательно, of
выдаст вам список вместо одного значения.
Есть много способов избежать этого, но вы должны сначала спросить себя, уверены ли вы, что в каждом рассматриваемом вами патче будет только один nukleotider. Если вы уверены в этом, вы можете выбрать один из следующих подходов:
Извлеките первые элементы из списков, возвращенных of
:
let x1 first [basetype] of nukleotider-here with [attached]
let x2 first [basetype] of nukleotider-on patch-at 1 0
let x3 first [basetype] of nukleotider-on patch-at 2 0
Извлечение агента из (предположительно) наборов агентов одного агента:
let x1 [basetype] of one-of nukleotider-here with [attached]
let x2 [basetype] of one-of nukleotider-on patch-at 1 0
let x3 [basetype] of one-of nukleotider-on patch-at 2 0
Немного задержите извлечение списка:
let x1 [basetype] of nukleotider-here with [attached]
let x2 [basetype] of nukleotider-on patch-at 1 0
let x3 [basetype] of nukleotider-on patch-at 2 0
let kombination reduce word (sentence x1 x2 x3)
Просто перейдите к списку строк и сравните с этим:
let x1 [basetype] of nukleotider-here with [attached]
let x2 [basetype] of nukleotider-on patch-at 1 0
let x3 [basetype] of nukleotider-on patch-at 2 0
let kombination (sentence x1 x2 x3)
if kombination = ["A" "B" "C"] [set looking-for "M"]
Еще более причудливый:
let kombination reduce word map [ xs -> [basetype] of one-of xs ] (list
(nukleotider-here with [attached])
(nukleotider-on patch-at 1 0 )
(nukleotider-on patch-at 2 0)
)
Хорошо, последнее может быть излишним. И было бы еще больше способов сделать это. Но, надеюсь, вы найдете тот, который работает для вас … 🙂
Комментарии:
1. Потрясающе, Николас. Конечно. Я полностью упустил из виду проблему с набором агентов. Да, я полностью уверен, что существует только один «nukleotider» («Может быть только один!», как воскликнул Кристофер Ламберт в восьмидесятых) — Я просто опустил предложение [with], чтобы упростить вопрос. И да, я перевел с датского на «First» и т.д. Миллиард благодарностей!!! 🙂