1
난 그냥 몇 가지 하스켈을 배우고 및 REPL에서 지능형리스트와 함께 재생하는 동안 나는 튜플 ("bird", 4)
다음 코드에서 생성되는 방법을 이해 할 수 없습니다하스켈 : 지능형리스트 평가에 예기치 않은 결과
*Main> :{
*Main| [(x, y) | x <- ["cat", "dog", "bird"]
*Main| , y <- [1..length x]]
*Main| :}
[("cat",1),("cat",2),("cat",3),("dog",1),("dog",2),("dog",3),("bird",1),("bird",2),("bird",3),("bird",4)]
내 이해로
이 x
의 길이가 3
보다 결코 더 큰, 나는 그들이 cat
세와 dog
세를 그대로 bird
세 튜플을 볼 것으로 예상한다.
왜 이런 일이 발생합니까? 하스켈은 무엇을보고 있습니까?
'x'가''bird "'이면 '길이 x'는'4'입니다 (bird는 4자를 갖기 때문에). –
오! 나는 그것을 얻는다.'x'는 전체 목록이 아닌 각 요소를 참조한다! 나는 그것을 완전히 오해했다. –
'x'는 * loop 변수 *로 표시해야합니다 (명령형으로 작성한 경우). 실제로'x'는 개별 항목을 나타내며 * 문자열 목록은 아닙니다. –