Конкатенация строк NetLogo?

#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» и т.д. Миллиард благодарностей!!! 🙂