2014-11-21 2 views
2

Я пытаюсь перебрать массив, содержащий данные о погоде. Это хорошо работает, и я также могу загрузить данные из массива, которые важны для меня. Поэтому я написал слово, которое помогает выглядит следующим образом:Подпись слова в множителе

: get-value (hsh str -- str) swap at* drop ;

[ "main" get-value "temp" get-value ] each 9 [ + ] times

Этот код выталкивает значения температуры из массива на стеке и строит сумму. «main» и «temp» являются ключевыми значениями массивов.

я исполню ее с помощью следующей команды: получить всепогодные-лист генерирует массив

"Vienna" get-weather-list [ "main" get-value "temp" get-value ] each 9 [ + ] times

В результате число в стеке. Теперь я хочу разбить этот вызов на один или два слова. Например:

: get-weather-information (city -- str) get-weather-list [ "main" get-value "temp" get-value ] each 9 [ + ] times ;

Проблема заключается в том, что я не очень понимаю, подпись данного слова. Я всегда получаю: «Котировка входа в« каждый »не соответствует ожидаемому эффекту». Я много пробовал, но не могу найти решение проблемы. Может кто-нибудь есть идея? Я благодарен за любую помощь :)

Приветствия Стефан

ответ

3

Это очень старый вопрос, в настоящее время, но он все еще может быть полезным для кого-то.

Во-первых, около each: эффект стека котировки составляет (... x -- ...).

Это означает, что он потребляет вход и не выводит ничего. Ваша цитата работала на интерпретаторе, потому что она позволяет вам уйти с «неправильным» кодом. Но для вызова каждого из определенного слова ваша цитата не может выводить ничего.

So each не то, что вы хотите. Если вы попытаетесь вставить переменную количество значений в стек, у вас снова будет такая же проблема. Последовательные слова выводят фиксированное количество значений.

То, что вы хотите сделать, это одна из двух вещей:

  1. Сделать новую последовательность с только значения, которые вы хотите, а затем вызвать sum на него.

  2. Используйте что-то вроде reduce, чтобы аккумулировать сумму при обработке списка.

Например, с reduce:

get-weather-list 0 [ "main" get-value "temp" get-value + ] reduce ; 
Смежные вопросы