簡體   English   中英

如何從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM