[英]How to find values from a list within a tuple within a list in Haskell?
[英]How to exclude a particular tuple from a list in haskell
我對如何從下面的代碼中的列表中濾除元素(1,1)感到非常困惑。
take 10 [ (i,j) | i <- [1,2],
j <- [1..] ]
yields
[(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8),(1,9),(1,10)]
我的想法是使用類似filter的方法,但是我不太確定在哪里實現它。
我去的是Filter ((i,j) /=0) "the list"
謝謝
你的嘗試
Filter ((i,j) /=0) "the list"
有一些問題,可以解決。
首先,該函數稱為filter
。 其次,它的第一個參數必須是一個函數:因此您可以使用\\(i,j) -> ...
來獲取列表作為輸入。 第三,您想要(i,j) /= (1,1)
-您無法將(i,j)
對與單個數字0
。
您現在應該能夠更正您的代碼。
作為使用filter
的替代方法,您還可以通過添加保護表達式(i,j) /= (1,1)
來指定不想將(1,1)
用作列表理解中的元素:
take 10 [ (i,j) | i <- [1,2], j <- [1..], (i,j) /= (1,1) ]
這類似於您編寫集合理解(類似於列表理解)的方式:
這個答案給出了一個很好的示例( [x | i <- [0..10], let x = i*i, x > 20]
),您可以在列表理解的尾端使用三種類型的表達式:
i <- [0..10]
提供值的來源。 x > 20
是任意謂詞-對於生成器中的任何給定值,只有在所有謂詞都成立的情況下,該值才會包含在結果中。 let x = i*i
執行與正常let
/ where
語句相同的任務。 從語法參考中獲取的不同表達式的名稱,表達式qual
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.