有没有办法在bash中实现/使用lambda函数?我想的是:
$ someCommand | xargs -L1 (lambda function)
Run Code Online (Sandbox Code Playgroud) 我有一段代码:
links
|> Seq.map (fun x -> x.GetAttributeValue ("href", "no url"))
Run Code Online (Sandbox Code Playgroud)
我想改写为:
links
|> Seq.map (fun x -> (x.GetAttributeValue "href" "no url"))
Run Code Online (Sandbox Code Playgroud)
但是F#编译器似乎并不喜欢这样.我认为这两个函数调用是可以互换的:
f (a, b)
(f a b)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
无法从此代码位置访问带有2个参数的成员或对象构造函数"GetAttributeValue".方法'GetAttributeValue'的所有可访问版本都有2个参数.
这似乎很有趣,因为它似乎表明它需要我给它的东西.我在这里错过了什么?
我从Haskell 学到了散布函数,并一直在寻找c#中的实现.
Intersperse有2个参数,一个IEnumerable <T>源和一个T元素.它返回一个IEnumerable,其中元素插入源的每个元素之间.
一种可能的用例是在整数列表之间放置一个任意整数,例如:
// returns: {1, 0, 2, 0, 3}
(List<int>() {1, 2, 3}).Intersperse(0);
Run Code Online (Sandbox Code Playgroud)
这是string.Join(...)的一般情况.
GHCI中是否有一种方法可以显示完整括号的声明版本?我发现自己有时想这样做,以帮助我理解一段我不熟悉的代码.有时候大师的简洁性让我们为n00bs掩盖了一些东西,任何帮助我打破这些野兽的东西似乎都有所帮助.
说,我有这样的事情.它没有编译,但你可以看到我正在尝试做什么.我试图谷歌每个方向,但没有骰子.可以这样做吗?
let inline read (s:string) : ^x =
let parsed = (^x : (static member ofString: string -> ^x option) (s))
// this is the bit I'm not sure how do to. This doesn't compile.
// I'm trying to determine what the statically chosen type for ^x is.
let t = typeof<^x>
match parsed with
| Some y -> y
| None -> failwithf "can't parse %s into %s" s (t.Name)
Run Code Online (Sandbox Code Playgroud) 有点谜题我想知道你是否可以帮我澄清一下.
让我们定义一个返回列表的函数:
let f = replicate 3
Run Code Online (Sandbox Code Playgroud)
我们想要做的是将此函数映射到无限列表,连接结果,然后只获取与谓词匹配的内容.
takeWhile (< 3) $ concatMap f [1..]
Run Code Online (Sandbox Code Playgroud)
大!返回[1,1,1,2,2,2]
,这就是我想要的.
现在,我想做类似的事情,但函数f现在将其结果包装在Monad中.在我的用例中,这是IO monad,但这适用于讨论我的问题:
let f' x = Just $ replicate 3 x
Run Code Online (Sandbox Code Playgroud)
要映射和连接,我可以使用:
fmap concat $ mapM f' [1..5]
Run Code Online (Sandbox Code Playgroud)
返回: Just [1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]
如果我想使用takeWhile
,这仍然有效:
fmap (takeWhile (< 3) . concat) $ mapM f' [1..5]
Run Code Online (Sandbox Code Playgroud)
返回:只[1,1,1,2,2,2].大!
但是,如果我列出了无限列表的列表,那么这不符合我的预期:
fmap (takeWhile (< 3) . concat) $ mapM f' [1..]
Run Code Online (Sandbox Code Playgroud)
似乎takeWhile
永远不会发生.不知何故,我没有得到我期待的懒惰计算.我有点迷茫.
在c#中执行linq-to-sql时,可以执行以下操作:
var data = context.MyTable.Where(x => x.Parameter > 10);
var q1 = data.Take(10);
var q2 = data.Take(3);
q1.ToArray();
q2.ToArray();
Run Code Online (Sandbox Code Playgroud)
这将产生2个单独的SQL查询,一个用TOP 10,另一个用TOP 3.在玩Flinq时,我看到:
let data = query <@ seq { for i in context.MyTable do if x.Parameter > 10 then yield i } @>
data |> Seq.take 10 |> Seq.toList
data |> Seq.take 3 |> Seq.toList
Run Code Online (Sandbox Code Playgroud)
是不是做同样的事情.这里似乎做了一个完整的查询,然后在客户端进行"接听"调用.我看到的替代方案是:
let q1 = query <@ for i in context.MyTable do if x.Param > 10 then yield i } |> Seq.take 10 @>
let q2 …
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
data Friend = Friend
{ friend_name :: Text
, friend_inTwitter :: Bool
, friend_twitterName :: Maybe Text
}
$(deriveJSON (drop 6) ''Friend)
Run Code Online (Sandbox Code Playgroud)
这段JSON被发布到处理程序中,我很难获取它。我尝试了不同的方法,但让我将其中之一放在此处以产生建议:
postTestR :: Handler RepPlain
postTestR = do
value <- parseJsonBody_
return $ RepPlain $ friend_name value
Run Code Online (Sandbox Code Playgroud)
那是行不通的,我可以看到类型不匹配,但是我不确定用什么替换它。我还想看看如何解析以JSON形式发布的列表好友。
谢谢!
一直在尝试编写自己的Prelude,并编写QuickCheck属性.写作Prelude进展顺利,但在进行QuickCheck时我已经设法被提前阻止.以下是我拥有的2个文件的片段:
- MyLude.hs
module MyLude where
import Prelude (Bool(..))
(&&) :: Bool -> Bool -> Bool
(&&) True a = a
(&&) _ _ = False
Run Code Online (Sandbox Code Playgroud)
- MyLudeTest.hs
module MyLudeTest where
import qualified MyLude as P
prop_test_and a b = a && b == a P.&& b
Run Code Online (Sandbox Code Playgroud)
然后在ghci我运行:
:load MyLudeTest.hs
:m +Test.QuickCheck
quickCheck prop_test_and
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
*** Failed! Falsifiable (after 1 test):
False
False
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,我已经实现了(||)并为它实现了一个quickcheck属性,它与prop_test_and完全相同,并且似乎没有任何问题.我错过了什么?