标签: functional-programming

Haskell的懒惰是否在编辑中得到保留?

所以我对这整个函数式编程交易都不熟悉.在我最近学习Haskell的冒险中,我遇到了一个奇怪的问题.我知道GHC交互环境允许所谓的"懒惰"评估,这意味着只在需要它们的值时才评估Haskell表达式.这听起来像是一个非常有用的行为,因为它可以帮助简化优化过程.我的下一个逻辑思路是:那么当Haskell编译成机器代码时会发生什么?你是否失去了懒惰?它变成了"命令式"代码吗?

haskell functional-programming

-1
推荐指数
1
解决办法
96
查看次数

实现过滤功能haskell

有没有办法使用列表推导编写Haskell过滤器函数的实现?

一个错误不断出现,我很难理解如何处理它.这就是我所拥有的:

filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' f xs = [f x | x <- xs]
Run Code Online (Sandbox Code Playgroud)

任何指导或链接将不胜感激.

haskell functional-programming list-comprehension list filter

-1
推荐指数
1
解决办法
383
查看次数

在Sanctuary.js(Fantasy Land)中键入值和"可访问的假型"

我正在处理Sanctuary.js上的文档.我一直在努力学习Haskell,并且在FP概念上有点挣扎.

  1. 我理解类型值是一个对象,它具有(a)构造函数(代表类型),(b)类型标识符(作为命名属性的类型名称@@type,以及(c)需要由除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象之间有什么区别?Fantasy-Land规范给出了标准类型来实现,包括它们的方法.一些(全部?)的这些方法遵守代数法则,比如Functors要求一种map遵循身份和组成规律的方法.我可以自由地创建我的用户类型并需要我喜欢的方法吗?这些方法是否必须符合任何代数设计原则或法则?不,它确实看起来像OO设计(减去对象中的状态)给我!我不知道我缺少什么.类似接口吗?父对象?

  2. 保护区的文档支持属性访问值的类型,或只是每个值-关于"通达假"的谈判nullundefined.它表示" Object接近,但Object.create(null)产生一个支持属性访问的值,但它不是Object类型的成员".但是,打印具有创建的对象null显示{},它的typeof存在object.它对我来说似乎是Object类型的成员.我有什么误会?为什么Accessiblepsuedo类型是必要的?伪类型和常规类型有什么区别?Integer例如,被称为伪类,但它似乎是Number我的类的扩展.

javascript haskell functional-programming sanctuary

-1
推荐指数
1
解决办法
126
查看次数

声明一个没有返回值的函数?

我们可以在函数式语言中创建一个带void(即没有返回值)的函数吗?像Haskell或Scheme

scheme haskell functional-programming

-1
推荐指数
2
解决办法
2520
查看次数

为什么我的while循环不会以这种函数式语言终止?

我正在尝试使用命令式和功能性概念构建标准ML程序,并将内容写入文件.但我的while循环似乎没有终止,而是连续打印相同的值.

fun writeImage image filename =

  let val ap = TextIO.openOut filename

      val (w,h) = size image

      val row = ref 0

      val stringToWrite = "";

  in

    while !row < h do

        TextIO.output(ap,"A");

        row := !row + 1;

     TextIO.closeOut ap

  end;  
Run Code Online (Sandbox Code Playgroud)

如果我在while循环之后删除第一行,则循环终止.但如果我包括TextIO.output(ap,"A");,它就没有.为什么会这样?

arrays algorithm functional-programming sml smlnj

-1
推荐指数
1
解决办法
339
查看次数

将操作和列表应用于嵌套列表

迭代嵌套列表有很多问题,但是我想迭代嵌套列表并应用另一个列表.

这是我的场景:

def operation(a, b):
    return a + b

def magic_function(func, list, nested_list):
    """iterate over nested_list and apply the next element of list"""
    ...

magic_function(operation, [0, 0, 0, 10, 10, 10], [[1, 2, 3], [1, 2, 3]])
Run Code Online (Sandbox Code Playgroud)

期望的输出:

[[1, 2, 3], [11, 12, 13]]
Run Code Online (Sandbox Code Playgroud)

用numpy回答这个问题的冲动可能很强烈,但在实际情况中,这些是对象,而不是数字.

该标准itertools.chain.from_iterable在此处不起作用,因为它不保留列表的嵌套.

python iterator functional-programming list multidimensional-array

-1
推荐指数
1
解决办法
149
查看次数

在where子句下做声明

我想转换IO [String][String]具有<-约束力.但是,我需要do在一个where声明中使用一个块来做到这一点,但是Haskell一直抱怨缩进.这是代码:

decompEventBlocks :: IO [String] -> IO [[String]]
decompEventBlocks words
 | words' /= [] = block : (decompEventBlocks . drop $ (length block) words')
 | otherwise = []
  where 
   do
    words' <- words
    let block = (takeWhile (/="END") words')
Run Code Online (Sandbox Code Playgroud)

这是什么原因?我们如何dowhere声明中使用块?而且,我们是否有机会在警卫面前发表一些声明?

monads haskell scope functional-programming do-notation

-1
推荐指数
1
解决办法
432
查看次数

如何实现这个更高阶的功能

我是函数式编程的新手,我正在尝试解决以下练习;


鉴于类型

type Cont r a = (a -> r) -> r
Run Code Online (Sandbox Code Playgroud)

实现以下高阶函数

mapReader :: (a -> b) -> (Cont r a) -> Cont r b
Run Code Online (Sandbox Code Playgroud)

第一步是简化类型,它给出:

mapReader :: (a -> b) -> ((a -> r) -> r) -> (b -> r) -> r
Run Code Online (Sandbox Code Playgroud)

接下来,定义需要在此函数中提供的参数.这些参数是我们得到的三个函数

mapReader :: (a -> b) -> ((a -> r) -> r) -> (b -> r) -> r
mapReader f g h = _1
Run Code Online (Sandbox Code Playgroud)

从这里,我们可以定义以下类型:

f :: a -> b
g :: (a -> r) -> …
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming

-1
推荐指数
1
解决办法
127
查看次数

迭代Haskell中的3元组列表

plusOne :: [[(Int, Int, Int)]] -> [[(Int, Int, Int)]]

给出一个3元组列表.如果我想遍历列表并且对Int值进行+1,那么我该如何处理呢?我不确定这是否应该使用地图.

有人能指出我正确的方向吗?

recursion haskell functional-programming

-1
推荐指数
1
解决办法
338
查看次数

打印到控制台并在同一功能中更新Monad状态

我想定义一个期望的函数,Int根据数字(x)在控制台中输出错误,然后更新Statewith Nothing.

如何在一个函数中加入这些命令?

这是我得到的:

  type Env = [(Variable,Int)]
  newtype StateError a = StateError { runStateError :: Env -> Maybe (a, Env) }
  class Monad m => MonadError m where
    throw :: Monad m => a -> m a

  instance MonadError StateError where
    throw x = StateError (\s -> Nothing)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何执行IO副作用,然后在同一个函数定义中更新状态

monads haskell functional-programming

-1
推荐指数
1
解决办法
115
查看次数