Сравнение заданных c пунктов списков - PullRequest
1 голос
/ 18 февраля 2020

Я бы хотел сравнить элементы списков, глядя на указанные c элементы. Мои списки могут отличаться по некоторым пунктам, но могут быть одинаковыми в первых двух или также в последнем (времени), как показано ниже.

[(object 10) (owner 6) men 0.408 0.365 (time 3)]

и

[(object 10) (owner 6) men 0.408 0.364 (time 3)]

Используя следующий код:

    to-report count-dupl [ a-list ]

       let t_list remove-item 0 a-list
       set shift_list lput [-999] t_list  

       let dup_count 0
      (foreach my-list shift_list [ [ a b ] -> 
           show ( word " Comparing " a " to " b )
     if ( item 0 a = item 0 b or item 6 a = b or item 6 a + 1 = b) [ set dup_count (dup_count + 1) ] ])

    print word "Count duplicates: "  dup_count
    if-else ( dup_count > 0 ) [ report true ][ report false ]  
end

, он не возвращает true, если первые два элемента или если фактор времени и фактор времени + 1 в двух списках являются дубликатами. Я хотел бы выбрать элементы, которые не являются последовательными, а также не настолько близкими по времени (то есть, которые отличаются по крайней мере на 1 или 2 такта - отметка 6).

Надеюсь, вы мне поможете.

Большое спасибо

1 Ответ

0 голосов
/ 29 марта 2020

Я сомневаюсь, что вы хотите сравнить элемент со всем списком.

Я не специалист по netlo go, но, возможно, вам нужно больше ( ) паренов в начальных if заявление. Или перефразируйте как меньшие тесты:

    if (item 0 a = item 0 b) [ set dup_count (dup_count + 1) ]
    if (item 6 a = item 6 b) [ set dup_count (dup_count + 1) ]
    if (item 6 a + 1 = item 6 b) [ set dup_count (dup_count + 1) ]

Трудно понять, насколько полезно смещение списка ввода на одну позицию. Похоже, что отладочное сообщение показывает список, отличный от сравниваемого.

Окончательный оператор if-else может быть свернут в один report dup_count > 0

...