2012-05-22 68 views
4

我一直在學習一些Haskell並編寫非常簡單的程序。我想做一個函數,將返回給定位置的元素。以下是我試圖做的 -Haskell-表達式上下文中的模式語法:_

elempos::Int->[a]->a 
elempos n (b:_)=head (drop n (b:_)) 

但是我在GHCi編輯器中加載Test.hs文件時出現此錯誤。

Pattern syntax in expression context: _ 

它說失敗,模塊加載:無。 因爲我對這門語言很陌生,所以我並沒有真正明白這個錯誤是什麼(目前在學習Haskell的第4章中)。有誰能告訴我這裏有什麼問題嗎?

+0

'_'作爲模式意味着「我不在乎它是什麼」,所以它不僅不被允許,而且將它「喂」到像「drop」這樣的函數是沒有意義的(它需要知道它的參數)。 – Landei

+0

我現在明白了。謝謝。 – Andariel

+1

有!運營商正在做你所需要的。 – demi

回答

11

_僅在模式內有效,您試圖在表達式中使用它:head (drop n (b : _))。既然你真的不需要分解列表,你需要尾部,解決方案是:

elempos n xs = head (drop n xs) 
+0

啊..謝謝你澄清。在我看到它後,我可能會太激動,無法以任何可能的方式在函數中使用_。 =)非常感謝。 – Andariel

+1

@Andariel:如果它解決了您的問題,請不要忘記接受他的回答,請:) –