小编is7*_*s7s的帖子

如何在Haskell中定义Lisp的应用?

不应该像Haskell这样的惰性语言允许这个定义,其中函数是curry?

apply f [] = f
apply f (x:xs) = apply (f x) xs
Run Code Online (Sandbox Code Playgroud)

它基本上是一个将给定函数应用于给定参数列表的函数,并且很容易在Lisp中完成.有没有解决方法?

haskell types type-inference currying variadic-functions

39
推荐指数
4
解决办法
2663
查看次数

如何在Haskell中实现可变数组?

我已经阅读了很多关于这个主题的研究论文,他们通常认为数组是使用Monads实现的.但是这些论文都没有明确定义如何定义"类型"数组本身,它们只给出了使用monads访问或修改此类型的函数的定义.在Haskell中实现的数组如何有O(1)时间来访问或修改索引元素?(例如STUArray和MArray)

arrays monads state haskell mutable

27
推荐指数
3
解决办法
4527
查看次数

奇怪的GHCi懒惰的评价

我在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)

haskell lazy-evaluation ghci

20
推荐指数
1
解决办法
545
查看次数

Variadic撰写功能?

我正在尝试编写一个可变函数组合函数.基本上(.)除了第二个参数函数是可变参数之外.这应该允许表达式:

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)

haskell variadic pointfree function-composition

13
推荐指数
1
解决办法
883
查看次数

Prolog是一种无类型的语言吗?Prolog和动态类型语言有什么区别?

如果Prolog在字符串,数字,原子,列表和复合结构之间有明确的区别,那么它如何被称为无类型.它与动态类型语言(如Lisp)有何不同.

Prolog与"动态类型语言"定义的哪一部分相冲突?Lisp与"无类型语言"的定义中哪一部分冲突?

任何见解都表示赞赏.

更新

我已经知道动态,静态,强弱打字之间的区别.我的问题是关于Prolog的一个特例.我只想了解Prolog如何被认为是无类型的,尽管它似乎与动态类型语言没有明显区别.

这是Prolog无类型参考 http://en.wikipedia.org/wiki/Prolog#Types

lisp types programming-languages prolog dynamic-typing

10
推荐指数
1
解决办法
2030
查看次数

有没有数组无法有效解决的问题?

对于习惯于编程的人来说,有时很难在不使用数组/向量的情况下在函数式语言中编写高效的代码.然而,似乎总有一种聪明的方法.例如,排序可以在命令式和声明式编程语言中的O(n*log(n))时间内完成,并且交换操作的缺乏不是真正的问题.

考虑一种函数式编程语言,它没有数组或任何可以在恒定时间内访问任意元素的数据结构.例如,在没有数组的情况下获取SML或Haskell的子集.

当然,每个可计算的问题都可以通过用这种语言编写的程序来解决.但我想知道是否存在任何本质上无法在命令式世界之外有效解决的问题.通过"有效",我的意思是最多同时解决问题的最着名的命令式算法的复杂性.

例如,只使用SML或Haskell中的列表可以有效地计算矩阵乘法吗?

theory arrays complexity-theory haskell functional-programming

9
推荐指数
0
解决办法
404
查看次数

无限的斐波那契序列

我试图用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)

f# functional-programming fibonacci lazy-sequences

8
推荐指数
2
解决办法
1199
查看次数