2014-11-21 8 views
2

날씨 데이터가 포함 된 배열을 반복합니다. 그게 이미 잘 작동하고 또한 나를 위해 중요한 배열에서 데이터를로드 할 수 있습니다.요소의 단어 서명

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

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

이 코드는 스택의 배열에서 온도 값을 밀어 합계를 구축 : 그러므로 나는 다음과 같습니다 도움의 단어를 썼다. "main"과 "temp"는 배열의 키 값입니다.

I는이 명령을 실행한다 얻을 날씨리스트는 그 결과는 스택의 숫자 어레이

"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 -- ...)입니다.

즉, 입력을 소비하고 아무 것도 출력하지 않습니다. "잘못된"코드로 벗어날 수 있기 때문에 귀하의 견적은 통역사에서 일했습니다. 그러나 각 단어를 정의 된 단어에서 호출하면 견적에서 아무 것도 출력 할 수 없습니다.

그래서 each은 원하는 것이 아닙니다. 다양한 양의 값을 스택에 푸시하려고하면 같은 종류의 문제가 다시 발생합니다. 시퀀스 단어는 모두 고정 된 양의 값을 출력합니다. 당신이 원하는 무엇

두 가지 중 하나입니다

  1. 당신이 원하는 바로 값을 갖는 새 순서를 확인 한 다음에 sum를 호출합니다.

  2. reduce과 같은 것을 사용하여 목록 처리시 합계를 누적하십시오. 예를 들어

, reduce와 :

get-weather-list 0 [ "main" get-value "temp" get-value + ] reduce ;