标签: pointfree

关于Haskell中的currying和point自由风格的困惑

我试图实现这个功能

every :: (a -> IO Bool) -> [a] -> IO Bool 
Run Code Online (Sandbox Code Playgroud)

这是这个问题的主题.我没有明确的递归尝试这样做.我想出了以下代码

every f xs = liftM (all id) $ sequence $ map f xs
Run Code Online (Sandbox Code Playgroud)

我的功能不起作用,因为它不是懒惰的(问题中需要),所以没有赞成在那里:-).

但是,我并没有就此止步.我试图使功能无点,以便它更短(甚至更冷).由于参数fxs在我刚把他们表达了最后的:

every = liftM (all id) $ sequence $ map 
Run Code Online (Sandbox Code Playgroud)

但是这没有按预期工作,事实上它根本不起作用:

    [1 of 1] Compiling Main             ( stk.hs, interpreted )

    stk.hs:53:42:
        Couldn't match expected type `[m a]'
               against inferred type `(a1 -> b) -> [a1] -> [b]'
        In the second argument of `($)', …

haskell currying pointfree

9
推荐指数
1
解决办法
1527
查看次数

Python中的Pointfree函数组合

我有一些谓词,例如:

is_divisible_by_13 = lambda i: i % 13 == 0
is_palindrome = lambda x: str(x) == str(x)[::-1]
Run Code Online (Sandbox Code Playgroud)

并希望在逻辑上将它们组合在一起,如:

filter(lambda x: is_divisible_by_13(x) and is_palindrome(x), range(1000,10000))
Run Code Online (Sandbox Code Playgroud)

现在的问题是:这种组合可以用无样式编写,例如:

filter(is_divisible_by_13 and is_palindrome, range(1000,10000))
Run Code Online (Sandbox Code Playgroud)

这当然不具有期望的效果,因为λ函数的真值是Trueand并且or是短路运算符.我想出的最接近的事情是定义一个类P,它是一个简单的谓词容器,它实现__call__()并拥有方法and_()or_()组合谓词.定义P如下:

import copy

class P(object):
    def __init__(self, predicate):
        self.pred = predicate

    def __call__(self, obj):
        return self.pred(obj)

    def __copy_pred(self):
        return copy.copy(self.pred)

    def and_(self, predicate):
        pred = self.__copy_pred()
        self.pred = lambda x: pred(x) and predicate(x) …
Run Code Online (Sandbox Code Playgroud)

python predicate pointfree function-composition

9
推荐指数
1
解决办法
2514
查看次数

将表达式转换为无点样式(Haskell)

我编写了这段代码,我必须将其重写为pointfree样式:

num_of_occ ele list = length(filter(==ele)list) 
Run Code Online (Sandbox Code Playgroud)

所以我这样做了:

num_of_occ ele = length . filter((==)ele)
Run Code Online (Sandbox Code Playgroud)

有用.比我这样做:

num_of_occ = length . filter . (==)
Run Code Online (Sandbox Code Playgroud)

它没有...我的想法有什么不对?

haskell functional-programming pointfree

9
推荐指数
1
解决办法
1687
查看次数

f1 =翻转const map.这个功能如何运作?

假设我们有这个无点函数:

f1 = flip const map
Run Code Online (Sandbox Code Playgroud)

我对它究竟是如何工作以及它应该做什么一无所知?即我知道map,const和flip函数是什么.但是把这些放在一起对我来说没有意义.这个功能究竟发生了什么?它似乎返回了我每次传递给它的同样的东西,但是......为什么?

haskell const map flip pointfree

9
推荐指数
3
解决办法
885
查看次数

为什么在Haskell充满积分时,无点样式称为点免费?"无点"一词来自哪里?

我目前正在阅读" 了解你是一个很好的Haskell",我在第85页上看到了"无点样式 " 的概念,如下所示.但是,fn功能充满了积分!这让我很困惑.

  • 为什么这种写作风格在点时会被称为"无点" ?

  • 我该如何理解这个概念?"无点"在什么意义上?

  • "无点风格"一词来自哪里?也许来自一个用空间表示功能组成的语言?

PS:到目前为止,这是这本优秀书中唯一令人困惑的部分(即到目前为止我读过的前85页).

在此输入图像描述

haskell coding-style pointfree

9
推荐指数
2
解决办法
408
查看次数

Haskell:为什么((.).(.))fg等于f.GX?

你能解释一下表达式的含义((.).(.))吗?据我所知(.)有类型(b - > c) - >(a - > b) - > a - > c.

haskell types combinators pointfree function-composition

8
推荐指数
1
解决办法
599
查看次数

这是javascript功能镜头的一个位置吗?

无点风格的 javascript以获得乐趣.

假设我正在编写视频游戏"暗黑破坏神",我正在使用像这样的复杂嵌套类型对敌人进行建模,但更深入,更复杂:

{ name: "badguy1", stats: { health: 10: strength: 42 }, pos: {x: 100, y: 101 } }
Run Code Online (Sandbox Code Playgroud)

所以我列出了我所有的敌人.我想对某个半径范围内的所有敌人造成伤害

function isInRange(radius, point) { return point.x^2 + point.y^2 >= radius^2; }
function fireDamage(health) { return health - 10; }    
var newEnemies = enemies.filter(isInRange).map(fireDamage);
Run Code Online (Sandbox Code Playgroud)

这当然不是类型检查 - 我的组合器采用原语,所以我需要映射和过滤"另一个级别".我不想模糊过滤器/地图业务逻辑管道.我知道镜头可以帮助我,可以说我在浏览器中,因为这对于可变结构来说当然是微不足道的.我该怎么做?

javascript functional-programming pointfree

8
推荐指数
2
解决办法
1931
查看次数

有没有办法在Haskell中使h(fx)(gx)无点?

我猜想我想要J的叉功能.有没有办法做到这一点?

haskell fork pointfree

8
推荐指数
2
解决办法
595
查看次数

使用ramda在JS中进行Pointfree递归

我正在学习无点函数,并试图以该样式实现这个递归的空删除器.

工作,但不是免费的:

function removeNulls(obj) {
  return R.ifElse(
    R.either(R.is(Array), R.is(Object)),
    R.pipe(
      R.filter(R.pipe(R.isNil, R.not)),
      R.map(removeNulls)
    ),
    R.identity
  )(obj)
}

module.exports = removeNulls
Run Code Online (Sandbox Code Playgroud)

以下是我对此无效的尝试:

const removeNulls = R.ifElse(
  R.either(R.is(Array), R.is(Object)),
  R.pipe(
    R.filter(R.pipe(R.isNil, R.not)),
    // throws `ReferenceError: removeNulls is not defined`
    R.map(removeNulls)
  ),
  R.identity
)
Run Code Online (Sandbox Code Playgroud)

javascript recursion functional-programming pointfree ramda.js

8
推荐指数
1
解决办法
2085
查看次数

使用无点表示法时如何强制执行类型

您好如何在编写方法时强制执行GHC 类似函数Data.Text.read=~运算符的类型Text.Regex.Posix

例:
a=["1.22","3.33","5.55"]

没有点免费:
b= map (\x-> read x ::Double) a

如何read使用无点表示法强制执行类型?

b=map read::Double a
b= map (read . f1 .f2 .f3... . fn )::Double a (构成方法时)
,其中f1 , f2 ...fn一些方法

或者更好的是,read当它属于一系列方法时,如何指定类型,不是在链的末尾!:
b=map (f2 . read . f1 ) a

haskell pointfree

8
推荐指数
1
解决办法
114
查看次数