标签: pointfree

这个斐波那契函数如何记忆?

通过什么机制这个斐波那契函数被记忆了?

fib = (map fib' [0..] !!)                 
     where fib' 1 = 1                                                        
           fib' 2 = 1                                                        
           fib' n = fib (n-2) + fib (n-1)                    
Run Code Online (Sandbox Code Playgroud)

在相关的说明中,为什么这个版本不是?

fib n = (map fib' [0..] !! n)                                               
     where fib' 1 = 1                                                        
           fib' 2 = 1                                                        
           fib' n = fib (n-2) + fib (n-1)                    
Run Code Online (Sandbox Code Playgroud)

haskell memoization fibonacci lazy-evaluation pointfree

111
推荐指数
4
解决办法
8253
查看次数

什么是函数式编程中的点自由风格?

我最近注意到的一个短语是"无点"风格的概念......

首先,有这样的问题,也是这一个.

然后,我在这里发现他们提到"另一个可能值得讨论的话题是作者不喜欢点自由风格."

什么是"免费"风格?有人可以给出简明的解释吗?它与"自动"曲线有关吗?

为了了解我的水平 - 我一直在教自己Scheme,并编写了一个简单的Scheme解释器...我理解"隐含"currying是什么,但我不知道任何Haskell或ML.

scheme functional-programming coding-style pointfree

87
推荐指数
4
解决办法
2万
查看次数

函数式编程中"无点"风格的优缺点是什么?

我知道在某些语言(Haskell?)中,努力是实现无点样式,或者永远不要通过名称显式引用函数参数.这对我来说是一个非常难以掌握的概念,但它可以帮助我理解这种风格的优点(或者甚至是缺点).谁能解释一下?

f# functional-programming pointfree

66
推荐指数
3
解决办法
4311
查看次数

什么(f.).在Haskell中意味着什么?

我已经看到很多函数是根据模式定义的(f .) . g.例如:

countWhere = (length .) . filter
duplicate  = (concat .) . replicate
concatMap  = (concat .) . map
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

haskell functional-programming pointfree function-composition tacit-programming

49
推荐指数
2
解决办法
3709
查看次数

在Haskell中执行`and`和`或`表示布尔函数

我刚写了以下两个函数:

fand :: (a -> Bool) -> (a -> Bool) -> a -> Bool
fand f1 f2 x = (f1 x) && (f2 x)

f_or :: (a -> Bool) -> (a -> Bool) -> a -> Bool
f_or f1 f2 x = (f1 x) || (f2 x)
Run Code Online (Sandbox Code Playgroud)

它们可能用于组合两个布尔函数的值,例如:

import Text.ParserCombinators.Parsec
import Data.Char

nameChar = satisfy (isLetter `f_or` isDigit)
Run Code Online (Sandbox Code Playgroud)

看了这两个函数后,我意识到它们非常有用.以至于我现在怀疑它们是否包含在标准库中,或者更可能是使用现有函数有一种干净的方法来执行此操作.

这样做的"正确"方法是什么?

haskell combinators pointfree

42
推荐指数
3
解决办法
5万
查看次数

类型(c→d)→(a→b→c)→(a→b→d)的Haskell函数组合算子

普通的功能组成属于这种类型

(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)

我认为这应该概括为类型:

(.) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
Run Code Online (Sandbox Code Playgroud)

一个具体的例子:计算差分平方.我们可以写diffsq a b = (a - b) ^ 2,但感觉我应该能够编写(-)(^2)编写类似的东西diffsq = (^2) . (-).

当然,我不能.我可以做的一件事是使用一个元组而不是两个参数(-),通过转换它uncurry,但这不一样.

有可能做我想要的吗?如果没有,我误解的是什么让我认为它应该是可能的?


注意:这里已经有效地提出这个问题,但是没有给出答案(我怀疑必须存在).

haskell pointfree function-composition

39
推荐指数
5
解决办法
9075
查看次数

如何使用( - >)Monad实例和关于( - >)的混淆

在不同的问题上,我发现了关于使用(->)Monads实例的评论中的提示,例如用于实现无点样式.

至于我,这有点过于抽象.好吧,我已经看到了Arrow实例,在(->)我看来,它(->)可以在实例表示法中使用,但不能在类型声明中使用(这可能只是另一个问题的东西).

有没有任何例子使用(->)Monad的例子?还是一个很好的链接?

很抱歉,如果这个问题可能已经在这里讨论过,但是搜索" (->)Monad实例"会给你很多次点击,因为你可以想象......因为几乎所有关于Haskell的问题都涉及到(->)"Monad".

monads haskell functional-programming pointfree

36
推荐指数
2
解决办法
3114
查看次数

JavaScript函数式编程库的当前状态

图书馆

  • Low Dash Underscore的启发,明显地修复了很多东西,很棒的API显然它受到了下划线的启发,它也做错了!
  • fn.js目前1.0以下但是文档很棒,基本功能
  • Bilby.js由Brian Mckenna创建,他正在开发一种编译成JavaScript的函数式语言.似乎有一个核心功能编程概念.编辑: Bilby似乎符合Fantasy Land规范.
  • Fantasy Land Fantasy土地不仅包括大量的函数式编程模块,还包括一个关于如何实现"代数结构"(也就是你的对象)与库兼容的正式规范.将此作为标准会很棒.实际上没有文档(或者我找不到它).
  • 功能JavaScript一个(如果不是) JavaScript的第一个函数式编程库,看起来已经过时了,但它确实很棒.
  • Wu.js对此并不了解,但Lonsdorf在旧视频中使用了autoCurry.
  • Pointfree Fantasy幻想图书馆的功能集合包括Lonsdorf到无点样式(无论这意味着什么).

    添加
  • Folktale一个年轻但非常有前途的项目,拥有大量的模块.正如它的名字暗示其灵感并实现了代数结构的Fantasy Land规范.它的文档很浅,但它比幻想土地更好.

问题

我想要一个一致的库,使我能够轻松地做这些技巧,专注于高级功能概念(仿函数,幺半群,monad,镜头等),不会放弃开发.

现在最好的选择是什么?

笔记

  1. Underscore不包括在内,因为它做错了!虽然我用它作为标签,因为其他库没有标签.

javascript functional-programming pointfree underscore.js

35
推荐指数
0
解决办法
5479
查看次数

我怎么能理解"(.).(.)"?

我相信我对fmap . fmapFunctors 了解,但是在功能方面它已经让我头疼了好几个月了.

我已经看到你可以只应用(.)to 的定义(.) . (.),但我忘了怎么做.
当我自己尝试时,它总是错误的:

(.) f g = \x -> f (g x)
(.) (.) (.) = \x -> (.) ((.) x)
\x f -> (.) ((.) x) f
\x f y  -> (((.)(f y)) x)
\x f y g-> (((.)(f y) g) x)
\x f y g-> ((f (g y)) x)
\x f y g-> ((f (g y)) x):: t2 -> (t1 -> t2 -> t) -> t3 …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming pointfree

33
推荐指数
3
解决办法
2141
查看次数

任何人都翻转(<$>)

我找到了以下定义

(%)  = flip fmap
Run Code Online (Sandbox Code Playgroud)

我可以编写如下代码:

readFile "/etc/passwd" % lines % filter (not . null)
Run Code Online (Sandbox Code Playgroud)

对我而言,替代方案更有意义

filter (not . null) <$> lines <$> readFile "/etc/passwd"
Run Code Online (Sandbox Code Playgroud)

显然它只是一个有序的问题,是否还有其他人这样做?是否有正当理由不写这样的代码?

haskell functional-programming pointfree

28
推荐指数
4
解决办法
2610
查看次数