Вы получили это в одном - ?
в версиях были по существу заполнителями для любой переменной, передаваемой в задачу. В словарной записи 5.3 для foreach
есть хороший пример:
foreach [1.1 2.2 2.6] [ show (word ? " -> " round ?) ]
=> 1.1 -> 1
=> 2.2 -> 2
=> 2.6 -> 3
В этом случае foreach
брал входной список [1.1 2.2 2.6]
и перебирал его, где ?
занимает место в блоке команд текущего обрабатываемого элемента. Насколько я понимаю, основное синтаксическое отличие в 6.X состоит в том, что теперь вы явно указываете, что это за заполнитель, используя оператор ->
. Итак, та же самая идея, что и выше, переведенная в 6.0 в примере foreach
в словарной записи 6.0 , выглядит следующим образом:
foreach [1.1 2.2 2.6] [ x -> show (word x " -> " round x) ]
=> 1.1 -> 1
=> 2.2 -> 2
=> 2.6 -> 3
Там вы можете видеть, что x
явно определяется как заполнитель. Это действительно улучшает ясность кода - вы можете определить местозаполнитель так, как вам хочется, чтобы он был настолько ясным и понятным, насколько вам бы хотелось, - этот (в верхней части) пример работает так же хорошо:
foreach [ 1.1 2.2 2.6 ] [ round_me -> show (word round_me " -> " round round_me) ]
Если вы используете несколько списков, обратите внимание, что вы должны окружить анонимную процедуру ( )
, а объявление заполнителя [ ]
- например:
( foreach [ 1 2 3 ] [ 10 20 30 ] [ [ a b ] -> print a * b ] )
Если вы переводите свой пример кода, тогда вы можете просто сосредоточиться на явном указании заполнителей. Это также может помочь разбить его на составные части для уточнения - более подробно в комментариях:
to-report split2 [ string delim ]
; split the string up into individual characters
let characters fput [""] n-values ( length string ) [ a -> substring string a ( a + 1 ) ]
; build words, cutting where the delimiter occurs
let output reduce [ [ b c ] ->
ifelse-value ( c = delim )
[ lput "" b ]
[ lput word last b c but-last b ]
] characters
report output
end
Теперь, чтобы следовать примеру Николаса из вашего связанного ответа, вы можете назвать это to-report
, чтобы разделить ваш текст:
to read-example
let line "Example\tof\tsome\ttext"
show split2 line "\t"
end
Дает вам:
observer: ["Example" "of" "some" "text"]
Надеюсь, это полезно!