不应该像Haskell这样的惰性语言允许这个定义,其中函数是curry?
apply f [] = f
apply f (x:xs) = apply (f x) xs
Run Code Online (Sandbox Code Playgroud)
它基本上是一个将给定函数应用于给定参数列表的函数,并且很容易在Lisp中完成.有没有解决方法?
我已经阅读了很多关于这个主题的研究论文,他们通常认为数组是使用Monads实现的.但是这些论文都没有明确定义如何定义"类型"数组本身,它们只给出了使用monads访问或修改此类型的函数的定义.在Haskell中实现的数组如何有O(1)时间来访问或修改索引元素?(例如STUArray和MArray)
我在ghci中为偶数和奇数定义了两个相互递归的列表,如下所示:
> let evens = 0:map (+1) odds; odds = map (+1) evens
Run Code Online (Sandbox Code Playgroud)
然后我使用了咨询thunk :sp
> :sp evens
evens = _
> :sp odds
odds = _
> take 5 evens
[0,2,4,6,8]
> :sp evens
evens = 0 : 2 : 4 : 6 : 8 : _
:sp odds
odds = _
Run Code Online (Sandbox Code Playgroud)
注意odds
虽然evens
已经评估了第5个元素,但是如何评估thunk .我可以想到一个直观的解释.odds
必须显式调用才能进行评估:
> take 5 odds
[1,3,5,7,9]
>:sp odds
odds = 1 : 3 : 5 : 7 : 9 : …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个可变函数组合函数.基本上(.)
除了第二个参数函数是可变参数之外.这应该允许表达式:
map even . zipWith (+)
Run Code Online (Sandbox Code Playgroud)
要不就
map even . zipWith
Run Code Online (Sandbox Code Playgroud)
目前,如果我添加IncoherentInstances
并且需要第一个参数函数的非多态实例,我已达到的工作.
{-# LANGUAGE FlexibleInstances, OverlappingInstances, MultiParamTypeClasses,
FunctionalDependencies, UndecidableInstances, KindSignatures #-}
class Comp a b c d | c -> d where
comp :: (a -> b) -> c -> d
instance Comp a b (a :: *) (b :: *) where
comp f g = f g
instance Comp c d b e => Comp c d (a -> b) (a -> e) where
comp …
Run Code Online (Sandbox Code Playgroud) 如果Prolog在字符串,数字,原子,列表和复合结构之间有明确的区别,那么它如何被称为无类型.它与动态类型语言(如Lisp)有何不同.
Prolog与"动态类型语言"定义的哪一部分相冲突?Lisp与"无类型语言"的定义中哪一部分冲突?
任何见解都表示赞赏.
更新
我已经知道动态,静态,强弱打字之间的区别.我的问题是关于Prolog的一个特例.我只想了解Prolog如何被认为是无类型的,尽管它似乎与动态类型语言没有明显区别.
这是Prolog无类型的参考 http://en.wikipedia.org/wiki/Prolog#Types
对于习惯于编程的人来说,有时很难在不使用数组/向量的情况下在函数式语言中编写高效的代码.然而,似乎总有一种聪明的方法.例如,排序可以在命令式和声明式编程语言中的O(n*log(n))时间内完成,并且交换操作的缺乏不是真正的问题.
考虑一种函数式编程语言,它没有数组或任何可以在恒定时间内访问任意元素的数据结构.例如,在没有数组的情况下获取SML或Haskell的子集.
当然,每个可计算的问题都可以通过用这种语言编写的程序来解决.但我想知道是否存在任何本质上无法在命令式世界之外有效解决的问题.通过"有效",我的意思是最多同时解决问题的最着名的命令式算法的复杂性.
例如,只使用SML或Haskell中的列表可以有效地计算矩阵乘法吗?
theory arrays complexity-theory haskell functional-programming
我试图用F序模仿Haskell在F#中着名的无限斐波纳契列表.为什么以下序列没有按预期进行评估?它是如何评估的?
let rec fibs = lazy (Seq.append
(Seq.ofList [0;1])
((Seq.map2 (+) (fibs.Force())
(Seq.skip 1 (fibs.Force())))))
Run Code Online (Sandbox Code Playgroud)