标签: combinators

Python:类似Haskell./ $

在Haskell中,我会写:

main = do mapM_ print . map (\x -> x^2) . filter (\x -> (mod x 2) == 0) $ [1..20]
Run Code Online (Sandbox Code Playgroud)

在Python我将不得不为使用许多括号或无用的变量...有像什么.,并$在Python?

python haskell functional-programming combinators

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

我可以从这个Elm表达式中删除lambda吗?

这是一个完整的Elm脚本,它将一堆元组放入HTML <ul>元素中.

import Html exposing (ul, li, text)
import List exposing (map)

values = [(1,2,3), (4,5,6), (7,8,9)]

main =
  ul [] (values |> map (\t -> li [] [text(toString(t))]))
Run Code Online (Sandbox Code Playgroud)

我喜欢|>在可能的情况下使用其他高阶运算符,但鉴于t上面表达式中相对较深的嵌套,我无法找到表达这一行的好方法.在Elm中是否有更高阶的运算符允许\tlambda不必要?

我意识到使用lambda可能更具可读性,但是想知道这里应该使用什么样的组合器,因为toString调用是在列表中.

lambda combinators higher-order-functions elm

4
推荐指数
1
解决办法
127
查看次数

在运行时输入带有存在的杂耍

我正在玩Haskell中的存在感和GADT,我正在尝试为组合器定义DSL(例如SKI).我有GADT工作,以及一个工作正常的减少功能(并且与问题无关)

{-# LANGUAGE GADTs, ExistentialQuantification #-}

import Control.Applicative
import Data.Monoid
import Control.Monad

data Comb t where
    S :: Comb ((a -> b -> c) -> (a -> b) -> a -> c)
    K :: Comb (a -> b -> a)
    I :: Comb (a -> a)
    B :: Comb ((b -> c) -> (a -> b) -> a -> c)
    C :: Comb ((b -> a -> c) -> a -> b -> c)
    W :: Comb ((a -> a …
Run Code Online (Sandbox Code Playgroud)

haskell combinators existential-type gadt dependent-type

4
推荐指数
1
解决办法
165
查看次数

将两个表达式组合成一个管道

我们假设我有以下两种表达方式:

Expression<Func<T, IEnumerable<TNested>>> collectionSelector;
Expression<Func<IEnumerable<TNested>, TNested>> elementSelector;
Run Code Online (Sandbox Code Playgroud)

有没有办法"组合"这些以形成以下:(?)

Expression<Func<T, TNested>> selector;
Run Code Online (Sandbox Code Playgroud)

编辑:

性能非常关键,因此如果可能的话,我会很高兴能够以极少的开销实现最佳解决方案.

非常感谢!

c# expression combinators

4
推荐指数
1
解决办法
361
查看次数

(=&lt;&lt;) 组合子的鸟名?

Haskell aviary 组合器列出(=<<)为:

(a -> r -> b) -> (r -> a) -> r -> b
Run Code Online (Sandbox Code Playgroud)

有官方鸟名吗?或者它可以通过预先存在的派生出来吗?

haskell functional-programming combinators

4
推荐指数
1
解决办法
483
查看次数

组合逻辑公理

我正在使用组合逻辑进行定理验证的一些实验,这看起来很有希望,但是有一个绊脚石:已经指出在组合逻辑中,确实例如I = SKK但这不是一个定理,它必须添加为公理.有谁知道需要添加的公理的完整列表?

编辑:您当然可以手工证明我= SKK,但除非我遗漏了某些东西,否则它不是具有相等性的组合逻辑系统中的定理.话虽如此,你可以将我扩展到SKK ......但我仍然缺少一些重要的东西.取一组子句p(X)和~p(X),这很容易解决普通一阶逻辑中的矛盾,并将它们转换为SK,执行替换并评估S和K的所有调用,我的程序生成以下(我使用'用于Unlambda的反击):

''eq''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'k true'k true

看起来我可能需要的是一套适当的规则来处理部分调用'k和',我只是没有看到这些规则应该是什么,我在这个领域找到的所有文献都是为数学家的目标受众而不是程序员.我怀疑一旦你明白答案可能很简单.

theory logic combinators theorem-proving

3
推荐指数
1
解决办法
702
查看次数

播放JSON:读取可选的嵌套属性

我有以下case类和JSON组合器:

case class Commit(
    sha: String,
    username: String,
    message: String
)

object Commit {
    implicit val format = Json.format[Commit]
}

case class Build(
    projectName: String,
    parentNumber: String,
    commits: List[Commit]
)

val buildReads: Reads[Build] =
    for {
        projectName <- (__ \ "buildType" \ "projectName").read[String]
        name <- (__ \ "buildType" \ "name").read[String]
        parentNumber <- ((__ \ "artifact-dependencies" \ "build")(0) \ "number").read[String]
        changes <- (__ \ "changes" \ "change").read[List[Map[String, String]]]
    } yield {
        val commits = for {
            change <- changes
            sha <- …
Run Code Online (Sandbox Code Playgroud)

json scala combinators playframework

3
推荐指数
1
解决办法
2160
查看次数

3
推荐指数
1
解决办法
133
查看次数

Rust 链接结果(组合器)

我一直在关注 Rust 教程,其中声称一个函数的两个版本会生成相同的结果:

版本 1:

pub fn get_transactions(fname:&str) -> Result<Vec<Transaction>,String> {
    let s = match std::fs::read_to_string(fname){
        Ok(v)=>v,
        Err(e)=> return Err(e.to_string()),
    };
    let t:Vec<Transaction> = match serde_json::from_str(&s) {
        Ok(v)=>v,
        Err(e)=> return Err(e.to_string()),
    };
    Ok(t)
}
Run Code Online (Sandbox Code Playgroud)

版本 2:

fn get_transactions_b(fname:&str) -> Result<Vec<Transaction>,String> {
    std::fs::read_to_string(fname)
    .map_err(|e| e.to_string())
    .and_then(|ld| serde_json::from_str(&ld) )
    .map_err(|e| e.to_string())
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到版本 2 的以下消息:

类型不匹配

预期结构std::string::String,找到结构serde_json::error::Error

注意:预期枚举std::result::Result<_, std::string::String> 发现枚举std::result::Result<_, serde_json::error::Error>

帮助:尝试使用预期枚举的变体:_::_serde::export::Ok(serde_json::from_str(&ld))


我无法从中做出头部或尾部:

  • 将鼠标悬停|ld|在 VS Code 中的ld 闭包参数上,它表示它属于类型std::string::String

  • 将鼠标悬停在 ld 上,from_str(&ld) …

combinators rust

3
推荐指数
1
解决办法
578
查看次数

如何使Parsec chainl1函数遵循运算符优先级规则

我正在编写标准数学符号 - > 符合DC POSIX标准的格式转换器.它接受输入字符串,将其解析为中间数据类型,然后通过它将其转换为输出字符串show.

这是使用的数据类型.我没有数据类型 - >输出字符串转换的问题,它完美无缺:

data Expression = Expression :+ Expression
                | Expression :- Expression
                | Expression :* Expression
                | Expression :/ Expression
                | Expression :^ Expression
                | Cons String

infixr 0 :+
infixr 0 :-
infixr 1 :*
infixr 1 :/
infixr 2 :^

instance Show Expression where
  show (x :+ y) = unwords [show x, show y, "+"]
  show (x :- y) = unwords [show x, show y, "-"] 
  show (x :* …
Run Code Online (Sandbox Code Playgroud)

haskell combinators parsec

2
推荐指数
1
解决办法
1980
查看次数