![](/img/trans.png)
[英]Write a function that takes two lists, and returns True if the first list is the reverse of the same elements in the second list, and False otherwise
[英]A function that it takes corresponding elements from the second list based on the first lists of indexes
對於我的編程課,我需要與此分配的問題相關的幫助。
您需要實現一個函數subList,以便它根據索引的第一個列表從第二個列表中獲取相應的元素。
例如,如果輸入是subList [0,3,4] [1,2,3,4,5,6,7,8]
,則答案應為[1,4,5]
subList :: [Int] -> [Int] -> [Int]
subList lst1 lst2
我對編程總體來說還是一個新手,所以這就是我到目前為止所擁有的全部...
如果兩個列表中都沒有類似的元素,我還需要一個錯誤函數。 例如,輸入= [0,9]
和[1,2,3]
,輸出應等於自定義錯誤字符串...例如,“輸入索引超出范圍”
您可以使用列表理解:
Prelude> let subList lst1 lst2 = [x | (i, x) <- zip [0..] lst2, i `elem` lst1]
Prelude> subList [0,3,4] [1,2,3,4,5,6,7,8]
[1,4,5]
讓我們分析一下代碼。 我們希望所有索引x
存在於第二個列表lst2
其索引i
存在於另一個列表lst1
。
在理解中,我們有以下三個主要方面:
|
是我們將為每個“迭代”捕獲的值(我們想要x
,這將是lst2
存在的值) zip [0..] lst2
我們建立了一個元組列表,其中元組的第一個值是索引,第二個值是從lst2
獲取的值(類似[(0, 1), (1, 2)...]
)。 (i, x) <- ...
對那些元組進行模式匹配(i, x) <- ...
其中i
將是每個索引,而x
每個值都將在前面說明。 i elem lst1
調用從ELEM功能Data.List
一個值是否存在於列表至極檢查。 該第三塊期望一個布爾值,並且對於每個從取值表達式中獲取的值,對另一個塊進行一次評估。 在這種情況下,僅當lst1
中存在值i
(我們的索引)時,它將評估為True
。 這是一個非常簡單的解決方案。 為了不完全破壞您的作業,自定義錯誤部分留給讀者練習。
subList lst1 lst2 = map (lst2 !!) lst1
map
將函數應用於列表的所有元素,並在新列表中返回結果,然后!!
從列表中獲取給定索引的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.