【问题标题】:Haskell : Syntax errorHaskell:语法错误
【发布时间】:2017-06-21 23:47:16
【问题描述】:

我正在使用 Haskell 堆栈。

module Len () where

   my_nthele :: String -> Integer -> Char
   my_nthele [] n = ''
   my_nthele (x:xs) n  | n == 0 = x
                       | otherwise = my_nthele xs (n-1)

Haskell 解释器显示“src/Len.hs:5:1: 错误: 解析错误(可能是不正确的缩进或不匹配的括号)”

我不知道出了什么问题。

【问题讨论】:

  • '' 不是有效字符。
  • @user2407038,啊,我明白了,那么如何在haskell中返回一个空字符?
  • 好的,看到了,我应该使用 Maybe
  • 另见安全包中的at*

标签: haskell haskell-stack


【解决方案1】:

syntax for character literals dictates that you need something between the single quotes:

2.6 字符和字符串文字

char  →   '(graphic|space|escape⟨\&⟩)' [remark: heavily simplified]

字符文字写在单引号之间,如 'a'

因此,'' 不是字符的有效语法。应该如何?一开始就没有性格。 Char 类型不包含不是字符的概念,就像 Int 不包含不存在的概念一样。

这正是Maybe 的用途:

my_nthele :: String -> Integer -> Maybe Char
my_nthele [] n = Nothing
my_nthele (x:xs) n  | n == 0 = Just x
                    | otherwise = my_nthele xs (n-1)

顺便说一下,作为一个练习,试着让你的函数更通用,这样你也可以使用my_nthele [1..10] 3 == Just 4。这并不难,但让你玩弄Maybe

【讨论】:

  • 谢谢伙计。我只是在玩字符串/字符类型。但是''不是一个字符真的让我很困惑。我不了解语言设计理论,但就像程序员总是从 0 而不是 1 数。'' 对我来说是一个很自然的字符。
  • Haskell 中的Char 不能为“空”。您可以将其设置为'\NUL',但这是另一回事。和 C 中的一样,你不能在那里设置char x = ''。在您的其他语言 PHP 和 JS 中,单个字符和字符串之间只有很小的区别,因此 '' 在这些语言中是一个空的 string
猜你喜欢
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多