在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?
这是一个完整的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调用是在列表中.
我正在玩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) 我们假设我有以下两种表达方式:
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)
编辑:
性能非常关键,因此如果可能的话,我会很高兴能够以极少的开销实现最佳解决方案.
非常感谢!
Haskell aviary 组合器列出(=<<)为:
(a -> r -> b) -> (r -> a) -> r -> b
Run Code Online (Sandbox Code Playgroud)
有官方鸟名吗?或者它可以通过预先存在的派生出来吗?
我正在使用组合逻辑进行定理验证的一些实验,这看起来很有希望,但是有一个绊脚石:已经指出在组合逻辑中,确实例如I = SKK但这不是一个定理,它必须添加为公理.有谁知道需要添加的公理的完整列表?
编辑:您当然可以手工证明我= SKK,但除非我遗漏了某些东西,否则它不是具有相等性的组合逻辑系统中的定理.话虽如此,你可以将我扩展到SKK ......但我仍然缺少一些重要的东西.取一组子句p(X)和~p(X),这很容易解决普通一阶逻辑中的矛盾,并将它们转换为SK,执行替换并评估S和K的所有调用,我的程序生成以下(我使用'用于Unlambda的反击):
''eq''s'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'k true'k true
看起来我可能需要的是一套适当的规则来处理部分调用'k和',我只是没有看到这些规则应该是什么,我在这个领域找到的所有文献都是为数学家的目标受众而不是程序员.我怀疑一旦你明白答案可能很简单.
我有以下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) 是否存在转换函数的惯用方法
val x: A => (B, C) = ...
Run Code Online (Sandbox Code Playgroud)
至
val y: A => (C, B) = ...
Run Code Online (Sandbox Code Playgroud) 我一直在关注 Rust 教程,其中声称一个函数的两个版本会生成相同的结果:
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)
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)
类型不匹配
预期结构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) …
我正在编写标准数学符号 - > 符合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)