首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习用英语阅读haskell

学习用英语阅读haskell
EN

Stack Overflow用户
提问于 2010-12-09 08:58:03
回答 4查看 904关注 0票数 12

我来自一个面向对象的背景(C,c++,java),所以我习惯于用英语阅读一行代码来理解它在做什么。

我目前正在做一项测试,以获得额外的学分。我有几行haskell,我不知道如何阅读,所以我不知道它们是做什么用的。我希望有人能把它们变成英语句子。

举一个我所说的英语句子的例子:

代码语言:javascript
复制
i = i + 1

I等于i+ 1的内容。

代码语言:javascript
复制
sul ys = all (`elem` ys)

函数sul检查ys的所有元素,同时检查是否在ys中找到了特定的元素,然后返回true或false(至少我认为它是这样做的,老师说要忽略all和elem都需要两个参数的事实。

我不能理解的几段代码是:

代码语言:javascript
复制
twasf p = foldr clip [] where
    clip x xs | p x = x : xs 
              | otherwise = []

(我不知道如何翻译"|")

代码语言:javascript
复制
infixl 5 <*>
xs <*> ys = zipWith ($) xs ys

(我不知道该怎么说)

代码语言:javascript
复制
rd []     = []
rd (a:as) = if a `elem` rd as then as else a : rd as

(我想这是“创建一个空列表rd,然后在as中检查a。如果找到,则返回as,否则将a推到前面并返回as)。”

任何帮助都将不胜感激。非常愿意阅读其他网站,如果有人可以指出我在一个网站,帮助你翻译的语言。

EN

回答 4

Stack Overflow用户

发布于 2010-12-09 09:14:33

第一部分:

代码语言:javascript
复制
    clip x xs | p x = x : xs 
              | otherwise = []

clip:如果p(x)成立,则返回x:xs,否则返回,否则返回空列表。

代码语言:javascript
复制
xs <*> ys = zipWith ($) xs ys

<*>将函数列表应用于值列表。

代码语言:javascript
复制
rd []     = []
rd (a:as) = if a `elem` rd as then as else a : rd as

逐字:

如果列表为空,则返回空列表。否则,检查列表的第一个元素是否被多次包含,如果是,则删除它并返回列表的其余部分。否则返回第一个元素,并将函数递归应用于其余元素。

票数 13
EN

Stack Overflow用户

发布于 2010-12-09 09:13:36

Haskell纯粹是函数式的,所以你不能说“创建,然后检查,做某事”。实体词更适用。

对于最后一个示例,我猜rd是用于删除重复项的,所以我认为是重复项删除…

  • of the empty list:是空列表;
  • of an a:as list:如果aas中,则是余数as,否则是a,否则是递归删除重复项。

顺便说一句。最后一行不应该是…吗?if a elem as then rd as else…?

票数 9
EN

Stack Overflow用户

发布于 2010-12-09 09:12:55

让我们来看看这些,一次一个。

  1. 管道语法表示一个防护,您可以将其视为类似于if-else梯子。我会把它理解为"If p of x为true,则返回连接到xs上的x,否则返回空列表“。
  2. 第一行显示"<*>是一个优先级为5的左联中缀操作符”(您必须想出自己对<*>的发音-在这种情况下,我通常会将其视为"op")。下一行是"xs op与用ys压缩的xs相同,使用函数应用程序运算符$".
  3. This是一个具有多个定义的函数的示例。它的工作方式是,如果参数的第一个“模式”匹配,则使用该定义,如果不匹配,则使用任何其他定义。在这种情况下,我会将其读作“空列表的rd是空列表,否则(等)”

您可能会从阅读一两篇Haskell教程中受益,这将帮助您熟悉Haskell的语法和思考方式-例如,查看http://learnyouahaskell.com/

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4393908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档