Haskell初学者的疑问

发布于 2022-08-16 03:31:31 字数 315 浏览 14 评论 9

  1. u2 :: [String] -> String
  2. u2 xss = foldr join [] xss
  3.     where join xs ys = xs ++ “n” ++ ys

复制代码
程序是想让列表中的每个字符串加n隔开,winhugs下的出错信息是file:.flodrdemo.hs:3 - Syntax error in expression (unexpected symbol "“")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

萝莉病 2022-08-22 01:16:01

也可以到网上搜一下这几个语言的特点及应用
或者看一下本版的一些老帖子

看哪个比较适合自己的胃口就选择那个?

BTW
我就是看老帖子中版主们对这几个语言的评价,又在网上搜了一下,决定学习Haskell的

糖粟与秋泊 2022-08-22 01:13:17

原帖由 stealfire 于 2009-4-26 06:04 发表
我对函数式编程非常有兴趣, ,觉得这个东东跟以前学过的语言都不一样。

可是我发现函数式语言也有好多种啊,不知道第一门选什么比较合适呢?

随便了。你要是实在决定不了,就抛色子。

ˉ厌 2022-08-22 00:54:31

原帖由 stealfire 于 2009-4-26 06:04 发表
我对函数式编程非常有兴趣, ,觉得这个东东跟以前学过的语言都不一样。

可是我发现函数式语言也有好多种啊,不知道第一门选什么比较合适呢?

haskell?还是sicp中的scheme呢,或者是去年炒得挺厉害 ...

都学。

阳光的暖冬 2022-08-22 00:27:58

我对函数式编程非常有兴趣, ,觉得这个东东跟以前学过的语言都不一样。

可是我发现函数式语言也有好多种啊,不知道第一门选什么比较合适呢?

haskell?还是sicp中的scheme呢,或者是去年炒得挺厉害的erlang?请大家多指教啊。非常感谢。

万水千山粽是情ミ 2022-08-21 19:59:56

原帖由 sysabod 于 2009-4-6 21:47 发表
程序是想让列表中的每个字符串加n隔开

试试这一个函数:
unlines ["abc", "123"]

时光沙漏 2022-08-21 19:33:13

你看你那引号两边还不一样,就知道不是半角的。

萌辣 2022-08-21 04:49:40

这两个函数做的事情是不同的,所以写法不一样。

  1. u2 :: [String] -> String
  2. u2 xss = foldr join [] xss
  3.     where join xs ys = xs ++ “n” ++ ys

复制代码

在这里, ys 是积累的值,注意到 u2 的类型,最后产出是 String,所以 ys 的类型是 String

xs 则是从 u2 的第一个参数(它是个列表)中提取的元素,所以 xs 的类型也是 String

String 相当于字符列表,若干个 String 连起来,直接用 ++ 就可以了。

  1. reverse xs = foldr snoc [] xs
  2.     where snoc y ys = ys++[y]

复制代码

在第二段代码中, ys 也是积累的值,当 xs 是 String 时,其类型也是 String。

而 y 则是从 xs(它是个列表)中提取的元素。如果 xs 是个 String,也相当于 [Char],则 y 是个字符。

把字符附加到字符列表 ys 上,应该先把 字符提升成字符列表,再 ++.

[ 本帖最后由 win_hate 于 2009-4-6 22:48 编辑 ]

破晓 2022-08-20 19:54:36

原帖由 win_hate 于 2009-4-6 21:52 发表
引号用了中文字符? 下面这个就没有问题

u2 :: [String] -> String
u2 xss = foldr join [] xss
    where join xs ys = xs ++ "n" ++ ys

请与这个例子比较
reverse xs = foldr snoc [] xs
    where snoc y ys = ys++[y]

为什么要写成[y]而不是y呢?上一个例子也没加方括号啊?

初雪 2022-08-19 08:52:13

引号用了中文字符? 下面这个就没有问题

  1. u2 :: [String] -> String
  2. u2 xss = foldr join [] xss
  3.     where join xs ys = xs ++ "n" ++ ys

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文