我希望我的程序打印一些东西,然后返回那个东西。我试过这个
(define (print x)
((display x)
x))
Run Code Online (Sandbox Code Playgroud)
不是应该直接说这个过程x
首先显示然后返回它,就像它在过程结束时所表达的那样吗?好吧,显然这是错误的,而且我对Scheme 有一些非常基本的了解。所以任何人,帮助我理解这一点。谢谢
我正在从这里做一些 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) 所以我一直在尝试通过解决 Codeforce 上的一些问题来学习 Haskell。
即使我认为我的时间复杂度是最佳的,我也得到了很多 TLE(超出时间限制)。
我的问题是:是我编写这个程序的方式使它变慢了吗?
例如,这里是问题。
基本上答案是找到给定的,其中
and =和之间的除数数之差。an
n
an = 2*an-1 + D(n)
D(n)
n
n-1
(更新:上限为n
10 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) 为什么这个算符定义被拒绝了?
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) 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,但没有得到以下代码:
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
我尝试使用保护方程式定义函数。为什么在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) 我有一个序列数组,具有无限的迭代次数(例如[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) 我正在尝试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
吗?
以下代码用于质数。我想知道为什么我们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) 如何以无点样式重写以下函数,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
它仍然存在.请帮忙.