小编Wil*_*ess的帖子

在方案中显示和返回内容的程序?

我希望我的程序打印一些东西,然后返回那个东西。我试过这个

(define (print x)
    ((display x)
     x))
Run Code Online (Sandbox Code Playgroud)

不是应该直接说这个过程x首先显示然后返回它,就像它在过程结束时所表达的那样吗?好吧,显然这是错误的,而且我对Scheme 有一些非常基本的了解。所以任何人,帮助我理解这一点。谢谢

syntax scheme function definition function-call

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

如何在 Haskell 中打印列表的最后一个元素?

我正在从这里做一些 Haskell 练习:https : //wiki.haskell.org/99_questions/Solutions/1,它显示了解决方案,但没有显示如何打印结果

我试过

myLast :: [a] -> IO ()
myLast [] = error "No end for empty lists!"
myLast [x] = print x
myLast (_:xs) = myLast xs


main :: IO ()
main = myLast [1,2,3]
Run Code Online (Sandbox Code Playgroud)

我有

/workspaces/hask_exercises/exercises/src/Lib.hs:10:14: error:
    * No instance for (Show a) arising from a use of `print'
      Possible fix:
        add (Show a) to the context of
          the type signature for:
            myLast :: forall a. [a] -> IO ()
    * In the …
Run Code Online (Sandbox Code Playgroud)

io haskell types typeclass type-signature

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

如何让这个 Haskell 程序运行得更快

所以我一直在尝试通过解决 Codeforce 上的一些问题来学习 Haskell。
即使我认为我的时间复杂度是最佳的,我也得到了很多 TLE(超出时间限制)。

我的问题是:是我编写这个程序的方式使它变慢了吗?

例如,这里是问题

基本上答案是找到给定的,其中 and =和之间的除数数之差。annan = 2*an-1 + D(n)D(n)nn-1

(更新:上限为n10 6)。

下面是我的程序。

import qualified Data.Map.Strict as Map

main = do t <- read <$> getLine
          putStrLn . show $ solve t

solve :: Integer -> Integer
solve 0 = 1
solve 1 = 1
solve n = (2*(solve (n-1)) + (fact n) - (fact (n-1))) `mod` 998244353
    where fact …
Run Code Online (Sandbox Code Playgroud)

primes haskell factors factorization

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

双类型Functor定义被拒绝

为什么这个算符定义被拒绝了?

data Second a b = Ok a b | Ko a b deriving (Show)

instance Functor (Second x) where
  fmap f (Ok a b ) = Ok (f a) b
  fmap f (Ko a b ) = Ko a (f b) 
Run Code Online (Sandbox Code Playgroud)

收到很多错误:

GHCi, version 8.0.1

main.hs:4:22: error:
    • Couldn't match type ‘b’ with ‘x’
      ‘b’ is a rigid type variable bound by
        the type signature for:
          fmap :: forall a b. (a -> b) -> Second x …
Run Code Online (Sandbox Code Playgroud)

haskell types compiler-errors functor

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

修正Haskell中quicksort的一段代码“ Filter”的一部分。

Filter :: (Ord a) => [a] -> [a]
 Filter [X:XS] = [[c|c<X, c<-XS ] ++ [X] ++ [c| c >X , c<-XS ]]
 quickSort :: Ord a => [a] -> [a]
 quickSort [] = []
 quickSort [x:xs] = quickSort mini ++ [x] + quickSort maxi
       where
           mini = filter xs
           maxi = filter xs   
Run Code Online (Sandbox Code Playgroud)

具有列表理解功能的“过滤器”功能正确吗?我知道Haskell-Libraries中有一个内置函数“ Filter”。但是我试图自己编写代码...

haskell filtering list-comprehension

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

Haskell与水平线混淆

我尝试了一下haskell,但没有得到以下代码:

rems :: Int -> [Int] -> [Int]
rems _ [] = []
rems k (x:xs)
  | k == x = rems k xs
  | otherwise [x] ++ rems k xs



main = print $
  rems 3 [5, 3, 2]
Run Code Online (Sandbox Code Playgroud)

如果您将其称为rems kx,则此函数将从列表x中删除每个k 。我知道它应该工作,因为我们在大学里写下来了。

我正在使用此IDE:https : //repl.it/languages/haskell

syntax haskell function definition guard-clause

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

通过保护方程式定义函数时,为什么会出现“分析模式中的错误:x&gt; = y”?

我尝试使用保护方程式定义函数。为什么在GHCi中不起作用?谢谢。

Prelude> :{
Prelude| maxThree :: Integer -> Integer -> Integer -> Integer
Prelude| maxThree x y z
Prelude| x >= y && x >= z = x
Prelude| y >= z = y
Prelude| otherwise = z
Prelude| :}

<interactive>:77:1: error: Parse error in pattern: x >= y
Run Code Online (Sandbox Code Playgroud)

syntax haskell function definition guard-clause

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

从Haskell中的列表返回序列的第一次迭代

我有一个序列数组,具有无限的迭代次数(例如[6,6,6,6,6]或[23,24,23,24]或[1、2、3、4、1、2、3、4 ])如何遍历Haskell中的每个此类列表并仅返回第一次迭代?在上述示例中:[6]; [23,24]; [1、2、3、4]

谢谢!

编辑:对不起,我不准确。列表确实是无限的。我的目标是返回给定Integer的等分序列的列表。我有一个函数返回除法器的总和。我从第一个和开始了递归调用,并构造了列表。这样就产生了像[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6 ...]的列表。

首先,我想解决这个问题,方法是使用列表的第一部分,直到第二个原始Int。但是,这让我感到震惊:更容易检查elem列表中是否存在总和。如果是,请按原样返回列表。否则,将总和追加并继续。

编辑2:产生(至少在我的定义中)无限列表的代码是以下块:

aliquot :: (Integral a) => a -> [a]
aliquot 0 = []
aliquot 1 = [1]
aliquot n = n : (aliquot $ sum $ divisors n)

divisors :: (Integral a) => a -> [a]
divisors n = filter ((0 ==) . (n `mod`)) [1 .. (n `div` 2)]
Run Code Online (Sandbox Code Playgroud)

math haskell functional-programming

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

Haskell - 使用 foldr 为函数 `all` 创建函数定义

我正在尝试all使用foldr. p是谓词。我知道这是可以做到的:

all p = and . foldr (\x xs -> p x : xs) []
Run Code Online (Sandbox Code Playgroud)

但我想做的是将函数and转换为foldr方程。这能做到吗?

我尝试了以下方法,但都失败了:

all p = foldr (\x p -> \ys -> and (p x) ys) True
all p = foldr (\x and -> (\ys -> (p x and ys))) True
all p = foldr (\x ys -> and . (p x) ys) True
Run Code Online (Sandbox Code Playgroud)

我对如何申请的理解不足foldr吗?

haskell predicate fold

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

质数逻辑,循环中的 n/2 条件

以下代码用于质数。我想知道为什么我们i<=n/2在循环中使用条件。

C程序:

#include <stdio.h>
int main()
{
int n, i, flag = 0;

printf("Enter a positive integer: ");
scanf("%d",&n);

for(i=2; i<=n/2; ++i)
{
    // condition for nonprime number
    if(n%i==0)
    {
        flag=1;
        break;
    }
}

if (flag==0)
    printf("%d is a prime number.",n);
else
    printf("%d is not a prime number.",n);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

c primes primality-test

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

如何用无点样式编写这个函数?

如何以无点样式重写以下函数,x完全从定义中删除参数(另外两个可能保留):

between min max x = (min < x) && (x < max)
Run Code Online (Sandbox Code Playgroud)

这不是一项任务,只是一个问题.我不知道该怎么办.我可以把它变成一个lambda函数

between min max = \x -> (min < x) && (x < max)
Run Code Online (Sandbox Code Playgroud)

但这不是没有点的,因为x它仍然存在.请帮忙.

haskell functional-programming pointfree tacit-programming

-12
推荐指数
2
解决办法
334
查看次数