小编Dou*_*wit的帖子

使OCaml函数多态用于int列表和浮点列表

有没有办法在OCaml中创建一个多态加法函数,对于整数和浮点数同样有效?所以例如,如果我有一个像这样的功能:

partialsums [1; 2; 3; 4; 5]我应该得到[1; 3; 6; 10; 15]但是这个函数不起作用,[1.; 2.; 3.; 4.; 5.]因为在OCaml int和浮点数绝对不能混合.但是如果我希望我的函数同样适用于int列表和浮点列表呢?是否存在int和float是子类型的一般类型?如果是这样,它是什么?我在这一点上有点失落.谢谢您的帮助?

polymorphism ocaml

8
推荐指数
3
解决办法
1006
查看次数

如何在 Haskell 中将其更改为 while 循环?

Haskell 具有挑战性!到目前为止我想到的是,我可以执行以下操作来模拟 Haskell 中的 for 循环以从用户那里获取数字列表:

myList <- sequence [putStr "Enter an integer: " >> (
    \s -> read s :: Int) <$> getLine | t <- [1..5]]
Run Code Online (Sandbox Code Playgroud)

伟大的!所以myList包含我输入的五个整数。伟大的!但问题就在这里。而不是迭代五次(或任何有限次数)的 for 循环如何将上述内容转换为等效的 while 循环?

所以我在想的是这个,但不幸的是它不起作用。有什么“神奇”的方法可以让它发挥作用吗?

takeWhile (\x -> x > 0) $ sequence [putStr "Enter an integer: " >> (
    \s -> read s :: Int) <$> getLine | t <- [1..]]
Run Code Online (Sandbox Code Playgroud)

问题在于它(\x -> x > 0)适用于 Int。(或任何 Num 类型。)但是来自该列表的实际上是一堆 IO Int。 x > 0返回一个布尔值。我需要一个返回 IO …

haskell functional-programming ghc ghci

3
推荐指数
1
解决办法
259
查看次数

为什么不加载到GHCI

我不明白为什么这不会加载到交互式Haskell解释器中.当我直接在GHCI中输入函数定义时,它的效果非常好.但是当我尝试从.hs文件加载函数定义时,就是当我收到错误消息时.有任何想法吗?谢谢您的帮助.

let partialsums lst = reverse ( partial_sums lst 0 [] ) where
                      partial_sums ls accum accumulator_list = 
                      if ls == [] then accumulator_list else
                      partial_sums ( tail ls ) ( accum + head ls ) 
                      ((accum + head ls) : accumulator_list)
Run Code Online (Sandbox Code Playgroud)

我在Python,Ruby和Ocaml中尝试过相同的函数定义.没问题!(Python的空白规则简单直观.Ruby和Ocaml不读取空格.在这些语言中,空格严格用于方便阅读程序的人.但我认为Haskell有一些非常严格的空白规则,我不熟悉.)

谢谢您的帮助.Haskell肯定看起来很有趣,但如果没有好教授的监督或指导,这是一种难以学习的语言.我只是想自己学习这门语言.

haskell

0
推荐指数
1
解决办法
74
查看次数