小编onu*_*tas的帖子

在将参数传递给字符串时将字符串写入char

我有以下代码:

char szBuf[256] = "";
std::string szFmt = "You have recieved %s item."
string szName = "Fork";
snprintf(szBuf, sizeof(szBuf), szFmt.c_str(), szName);
Run Code Online (Sandbox Code Playgroud)

我正在尝试将szFmt与szBuf结合起来,同时将szFmt与szName结合起来.但是,当我在win10中执行此代码时,我得到了如此奇怪的输出:

你收到了Léý项目.

当我尝试在OSX El Capitan中执行代码时,我收到以下错误

不能传递非平凡类型'字符串'throgh可变函数的对象; 呼叫将在运行时进行

那么问题是什么,我该如何解决这个问题呢?

注意:我检查了这个问题,但在答案中,他们直接传递"Fork",这也适用于我; 但是当我将它作为szName传递时它不起作用.

c++ string

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

myFlip f =\xy - > fyx如何工作?

在Allen和Moronuki的Haskell一书中,在第240页,它被作为翻转函数的实现给出

myFlip :: (a -> b -> c) -> b -> a -> c
myFlip f = \ x y -> f y x
Run Code Online (Sandbox Code Playgroud)

但是,我不明白这是如何工作的?特别是,当我提供两个参数˚F

flippedF = flip f
flippedF p q
Run Code Online (Sandbox Code Playgroud)

Haskell如何在实现中将pqxy匹配?

haskell functional-programming

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

可以给takeWhile函数包含的条件包含运算符吗?

我正在尝试计算价值

takeWhile (/="E"||/="A") ls
Run Code Online (Sandbox Code Playgroud)

哪里

ls = ["EVENT","6010","A","CHECK_PROMOTION_ELIGIBLE","-1","E","RUN_EVENT","6020"]
Run Code Online (Sandbox Code Playgroud)

但是,ghci表示为

Variable not in scope: (||/=) :: [Char] -> [Char] -> [Char]
Run Code Online (Sandbox Code Playgroud)

是否存在语法问题,或者只是||在指定takeWhile函数条件时我们不能使用运算符?

我试图删除||/="A"部分,然后没有错误.

haskell functional-programming

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

在定义"w"类型时获取"不在范围内变量:w :: Integer"错误

我是Haskell的新手,并且学习列表理解.从我从示例中看到的,我正在尝试执行以下代码:

[ w :: Integer | x <- [1..10], y <- [1..10], z <- [1..10], w == x*2 + y*2 + z*2, w < 20]
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

:66:3:错误:变量不在范围内:w :: Integer

:66:60:错误:变量不在范围内:w :: Integer

:66:82:错误:变量不在范围内:w :: Integer

我已经搜索了问题的原因,从这个问题来看,问题似乎是Haskell不知道变量的类型,但是在我的代码中,我正在定义它(就像我们在做数学时那样),但是问题仍然存在,那么这种定义有什么问题呢?我们如何解决呢?

请注意,尝试执行这段代码的整个目的只是为了学习如何使用与数学中使用相同的符号来进行列表理解.

haskell functional-programming

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

在使用Haskell的Eratosthenes Sieve中,为什么3,5,7的倍数没有从列表中删除?

我目前正在自学" Doask和Eijck 的Haskell逻辑,数学和编程之路 "一书,我在第3章.

在本章中,作者提供了一个Haskell代码,用于实现Sierat of Eratosthenes算法,我不喜欢它们的实现,所以我试着给出自己的实现; 但是,我的代码版本只删除2的倍数,我无法找出原因.这是代码:

sieve :: [Int] -> [Int]
sieve (0:xs) = sieve xs
sieve (x:xs) = x : sieve (mark x 2 xs)
 where
 mark :: Int -> Int -> [Int] -> [Int]
 mark n k (y:ys)
  | y == n*k = 0 : (mark n (k+1) ys)
  | otherwise = y : (mark n (k) ys) 
Run Code Online (Sandbox Code Playgroud)

而输出是

*Ch3> sieve [2..]
[2,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,...
Run Code Online (Sandbox Code Playgroud)

那么,为什么代码不执行相同的删除操作的倍数,其他数字,如3,5,7 ..?

primes haskell sieve-of-eratosthenes

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

在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
查看次数