所以我们有Hask类别,其中:
同样Functor
我们有:
fmap
用于将态射从一个类别映射到另一个类别.现在,当我们编写程序时,我们基本上会转换值(而不是类型),似乎Hask的类别根本不讨论值.我试图在整个等式中拟合值,并得出以下观察结果:
Int -> Int
现在我的问题是 - 在Hask类别(或一般类别理论)中,值是否有意义?如果是,那么任何关于它的参考或如果没有,那么任何原因.
我希望这个问题有道理:)
我经历过各种论文/文章/博客,而不是莫纳德.人们在各种背景下谈论它们,比如类别理论(世界上是什么?)等.经过所有这些并试图真正理解和编写monadic代码之后,我开始认识到monad只是语法糖(可能是最多的)所有人都得到了荣耀.无论是Haskell中的符号还是F#中的Computation Expressions,甚至LINQ都选择了许多运算符(记住LINQ语法也是C#/ VB中的语法糖).
我的问题是,如果有人认为monad不仅仅是语法糖(通过嵌套方法调用),那么请用"实用性"而不是"理论概念"来启发我.
谢谢大家.
更新:
在经历了所有答案之后,我得出的结论是,在特定语言中monad概念的实现是通过语法糖驱动的,但monad概念本身与句法糖无关,是非常一般或抽象的概念.感谢每个机构的答案,使概念本身与其在语言中实现的方式之间有所区别.
在概念层面,LISP(和方言)中的宏取一段代码(作为列表)并返回另一段代码(再次作为列表).
基于以上原则,一个简单的宏可以是:
(defmacro zz [a] (list print a))
;macroexpand says : (#<core$print clojure.core$print@749436> "Hello")
Run Code Online (Sandbox Code Playgroud)
但在clojure中,这也可以写成:
(defmacro zz [a] `(print ~a))
;macroexpand says : (clojure.core/print "Hello")
Run Code Online (Sandbox Code Playgroud)
我不确定这里的区别,哪些应该是首选方式.第一个看起来很简单,因为我们应该返回列表并避免使用像back tick这样的奇怪字符.
我需要从IEnumerable中获取一个元素,然后返回自身以及两侧的一系列元素.
所以,像这样:
var enumerable = new[] {54, 107, 24, 223, 134, 65, 36, 7342, 812, 96, 106};
var rangeSize = 2;
var range = enumerable.MySelectRange(x => x == 134, rangeSize);
Run Code Online (Sandbox Code Playgroud)
会返回类似的东西{ 24, 223, 134, 65, 36 }
.
(该项目使用.Net 3.5)
编辑 好的,人们似乎被挂起了一堆整体.我已经改变了这个例子,希望能让我更清楚自己追求的是什么.
请记住,这不一定是一个IEnumerable<int>
,但实际上是一个IEnumerable<TSomething>
.
我有一个ios应用程序.我可以使用自定义URL方案"linkedin://"从我的ios App打开链接的本机应用程序.但是如何通过我的ios App发布到本机应用程序的链接.我们有什么特别的参数吗?
linkedin URL方案支持的参数是什么?
谢谢,Thiagesh
以下显示修饰符"while"表示一旦元素与检查匹配,迭代将停止:
=> (for [x [3 2 3 1] :while (< x 3)] x)
()
Run Code Online (Sandbox Code Playgroud)
但是为什么以下不停止迭代?它应该在我的(错误的)理解中返回一个空列表.
=> (for [x [3 2 3 1] y [:a :b] :while (< x 3)] [x y])
([2 :a] [2 :b] [1 :a] [1 :b])
Run Code Online (Sandbox Code Playgroud)
实际上,事实证明在这种情况下"when"和"while"修饰符之间没有区别.
=> (for [x [3 2 3 1] y [:a :b] :when (< x 3)] [x y])
([2 :a] [2 :b] [1 :a] [1 :b])
Run Code Online (Sandbox Code Playgroud)
怎么会这样?
(cond ((test-1) (expression-1)))
当我使用cond时,我可以在(表达式-1)中给出几个函数吗?
像这样:
(cond ((= 1 1) ((fun1) (fun2)) )