Как найти первый элемент блока строк, первый символ которого соответствует входному символу? - PullRequest
0 голосов
/ 20 января 2019

Дано weapons: ["rock" "scissors" "paper"]

Если бы я сделал player-choice: ask "(r)ock, (p)aper, (s)cissors or (q)uit? "

как я могу найти символ, введенный пользователем в блок со словом weapons, прикрепленным к нему

Ответы [ 3 ]

0 голосов
/ 20 января 2019
>> abr: "p"
== "p"
>> parse weapons [some [into [x: abr (print x)] | skip]  ]
paper

или

>> parse weapons [collect some [into [x: abr keep (x)] | skip]  ]
== ["paper"]
0 голосов
/ 23 января 2019

Если вы хотите только одно совпадение и использовать только фактические названия элементов в своем блоке, ваше собственное решение подойдет. Но одна из важных вещей в Red - это то, как вы можете структурировать свои данные, чтобы упростить задачу. Например, если вы хотите выбрать элементы из списка, основываясь только на известном ключе (например, первом символе), вы можете сделать это явным, а не неявным.

weapons: ["r" "rock" "s" "scissors" "p" "paper"]
player-choice: ask "(r)ock, (p)aper, (s)cissors or (q)uit? "
print select weapons player-choice
0 голосов
/ 20 января 2019
weapons: ["rock" "scissors" "paper"]
matching-weapon: func [abbrev][
    foreach weapon weapons [
        if (first weapon) = first abbrev [
            return weapon
        ]
    ]
]
...