小编dav*_*420的帖子

C:char*的问题

/*
 * code.c
 *
 * TASK
 *      Reverse a string by reversing pointers. Function should use return
 *      type char* and use a char* parameter as input.
 */
#include <stdio.h>
#include <string.h>
#define STRMAX 51

char* reverse(char* sPhrase[]);

int main() {
    char sPhrase[STRMAX];
    char sReverse[STRMAX];
    printf("Enter string (max. 50 chars): ");
    gets(sPhrase);
    sReverse = reverse(sPhrase);

    return 0;
}

char* reverse(char* sPhrase[]) {
    char* sOutput[STRMAX];
    int iCnt = 0, iCntRev;

    for (iCntRev = strlen(*sPhrase)-2; iCntRev >= 0; iCntRev--) {
        sOutput[iCnt] = …
Run Code Online (Sandbox Code Playgroud)

c pointers

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

为什么这两段代码的行为不一样?

为什么以下这些功能不一样?第一个是正确的字符串拆分,但第二个似乎永远添加"",创建一个无限的列表

正确代码:

my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
    | notElem y lista=[lista]
    | otherwise=isMatch:(my_split rest y)
    where 
            isMatch=takeWhile (/=y) lista
            rest=tail $ dropWhile (/=y) lista
Run Code Online (Sandbox Code Playgroud)

坏代码:

my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
    | notElem y lista=[lista]
    | otherwise=isMatch:(my_split rest y)
    where 
    (isMatch,rest)=break (==y) lista
Run Code Online (Sandbox Code Playgroud)

唯一不同的部分是休息条件,在我看来它应该做同样的事情......加上第一个函数表单应该确保我不会永远地为我的结果添加空列表...抱歉任何问题,并提前感谢

haskell functional-programming

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

什么是影响列表理解中的因素的表现(处理时间)?

从Learn-you-a-haskell学习一个例子,"对于所有边和所有边都等于或小于10的直角三角形的周长为24?"

rightTrianglesOriginal = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2,a + b + c == 24]

我更改了原始示例的部分,并希望了解下面的过程(在极端条件下).

  • 谓词的顺序会影响性能吗?

  • 添加谓词(其他谓词暗示)是否会影响性能?(例如a> b,c> a,c> b?)?

  • 根据谓词(1)a> b和(2)c> a制作元组列表,然后进一步应用^ 2 + b ^ 2 = c ^ 2将提高整体性能?

  • 如果我们改变参数位置,例如(a,b,c)或(c,b,a),会对性能产生影响吗?

  • 如果需要这样大量的排列和组合,现实生活中应用的策略是什么?我们是否应该为下次使用存储预先计算的答案(尽可能)以提高性能或其他任何性能?

rightTriangles = [(a,b,c)| c < - [1..10],b < - [1..10],a < - [1..10],a ^ 2 + b ^ 2 == c ^ 2]

几乎在很短的时间内给出结果.

rightTriangles10 = [(a,b,c)| c < - …

performance haskell functional-programming

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

找不到模块“日期.时间.日历”

即使安装了时间包,我的 ghci 也找不到日历模块。

$ ghc-pkg list | grep time
old-time-1.0.0.6
time-1.2.0.3
time-1.4.0.1
Run Code Online (Sandbox Code Playgroud)

我试图删除旧的包,但这破坏了很多其他包。我该如何解决这个问题?

haskell cabal

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

如何使以下Scala代码更具功能性和更少程序性?

我试图围绕功能编程概念.考虑从列表中删除空(零长度)字符串的问题

以下是Haskell中的一个纯函数实现,即使您对该语言一无所知也是如此

removeEmpty            :: [String] -> [String]
removeEmpty []          = []
removeEmpty ([] :strs)  = removeEmpty strs
removeEmpty (str:strs)  = str : removeEmpty strs
Run Code Online (Sandbox Code Playgroud)

现在考虑我在Scala中的实现

  def removeEmpty(dirty: List[String]): List[String] = {
    if (Nil == dirty)
      dirty
    else {
      if (dirty(0).length() == 0)
        removeEmpty(dirty.tail)
      else
        dirty.head::removeEmpty(dirty.tail)
    }
  }
Run Code Online (Sandbox Code Playgroud)

它做了同样的事情,但对它有一个非常程序化的感觉.是否有更多功能的方法在Scala中编写相同的方法?

scala

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

在不使用索引参数的情况下索引递归

我试图编写一个递归函数来做某事,但在每一步我都想知道树中当前的深度/索引.那么如何在不使用函数签名中的索引参数的情况下实现这一目的呢?

就像是:

rec_fn n = do print index
              do_something n
              if n > 0
                then rec_fn (n-1)
                else print "end"
Run Code Online (Sandbox Code Playgroud)

所以我如何获得index,而不做以下事情:

rec_fn n i = do print i
                do_something n
                if n > 0
                  then rec_fn (n-1) (i+1)
                  else print "end"
Run Code Online (Sandbox Code Playgroud)

recursion haskell

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

这是foldM的案例吗?

sendrecv函数具有以下类型签名:

sendrecv :: Socket ->
            PSQ.PSQ (String, Integer) POSIXTime ->
            Map.Map (String, Integer) [String] ->
            String ->
            IO  (PSQ.PSQ (String, Integer) POSIXTime,  Map.Map (String, Integer) [String]) 
Run Code Online (Sandbox Code Playgroud)

它需要一个套接字,一个PSQ,一个Map和一个String,并返回一个PSQ和一个Map.

我想把它调用n次,其中套接字和字符串保持不变,但PSQ和Map得到修改,意味着修改后的PSQ,Map应该成为下一次运行的输入.

最初我认为这可能是foldM的完美案例,并尝试过例如

(q', m') <- foldM sendrecv (s, q1, m1, "ping") (enumFromTo 1 1000)
Run Code Online (Sandbox Code Playgroud)

但显然这不起作用,我担心我还没有理解整个foldM的事情,或者是否有可能传递静态参数(如s和"ping")以及如何.

haskell

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

如何使用Haskell monadic函数遍历树的元素?

我已经定义了一个代表树的新数据类型.我还实现了一个函数walk来遍历树的所有元素,函数的功能版本是正确的但不是他的monadic版本walkM.

module Hdot where
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

data RDoll a = Null | RDoll a [RDoll a] deriving (Show)    

test :: RDoll Int
test = RDoll 1 [RDoll 2 [Null], RDoll 3 [RDoll 4 [Null]]]

walk :: (a -> b) -> RDoll a -> [b]

walk f Null          = []
walk f (RDoll x rds) = ((f x): (concatMap (\x -> walk f x) rds))

walkM :: (Monad m) …
Run Code Online (Sandbox Code Playgroud)

monads tree haskell

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

Haskell和守卫的'循环'

我遇到了Haskell的问题.我有一个简单的代码:

petla szerokosc wysokosc pozycje = do
let plansza_x = oznacz_pola_dookola_jako_miejsca_na_skarby_wiele 
            pozycje
        (utworz_plansze pozycje szerokosc wysokosc) 
        szerokosc
 let x = make_list $ zlicz_x plansza_x
 guard ((sprawdz_kombinacje2 plansza_x pozycje (head x) szerokosc wysokosc) == True)
 x
Run Code Online (Sandbox Code Playgroud)

参数很好,但GHCI让我觉得奇怪.function make_list返回字符串列表,例如:[['_','_'],['*','_'],['_','*'],['*','*']].

我想loop获取此列表的第一个元素,将其作为参数粘贴到sprawdz_kombinacje2.如果该函数返回False,它将从列表中获取net元素.否则该函数petla应该返回String,例如:['_','*'].

问题:当我在GHCI中运行此函数时,它返回空列表,但它不应该:

*Main> petla 2 2 [(1,1,1)]
[]
Run Code Online (Sandbox Code Playgroud)

但是,当我添加return到最后一行时:

petla szerokosc wysokosc pozycje = do
let plansza_x = oznacz_pola_dookola_jako_miejsca_na_skarby_wiele 
            pozycje
        (utworz_plansze pozycje szerokosc wysokosc) 
        szerokosc
 let x = …
Run Code Online (Sandbox Code Playgroud)

haskell guard

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

为什么浮点异常?

我有一个浮点异常,我不知道为什么.

代码是这样的:

void calcola_fitness(){
    vector<double> fitness;
    int n=nodes.size();
    int e=edges.size();
    int dim=feasibility.size();
    int feas=(feasibility[dim-1])*100;
    int narchi=numarchicoll[dim-1]/e;
    int numero_nodi=freePathNode.size()/n;
    double dist_start_goal=node_dist(0,1);
    int i,f,t;
    double pathlenght=0;
    int siize=freePathNode.size();
    for(i=0;i!=siize-1; i++){
        f=freePathNode[i].getIndex();
        i++;
        t=freePathNode[i].getIndex();
        i--;
        pathlenght=pathlenght+node_dist(f,t);
    }        
    double pathlenghtnorm=pathlenght/10*dist_start_goal;
    double fit=((double)numero_nodi+pathlenghtnorm+(double)narchi)*((double)feas);
    fitness.push_back(fit);
}
Run Code Online (Sandbox Code Playgroud)

有人能帮助我吗?有什么问题?我可以解决这个问题吗?非常感谢你

c++

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

使用Haskell在列表中查找第n个元素

我正在尝试编写一个检索列表中第n个元素的函数.

这是我到目前为止所拥有的:

main :: IO ()
main = do print (nth 3 [1,2,10])

nth _ [] = [] 
nth a (x:xs) 
 | (a == 1) = x 
 | otherwise = nth (a-1) xs
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

Error occurred
ERROR line 2 - Cannot justify constraints in explicitly typed binding
*** Expression    : main
*** Type          : IO ()
*** Given context : ()
*** Constraints   : (Show a, Num [a])
Run Code Online (Sandbox Code Playgroud)

haskell

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

Haskell IO反向字符串输入

我一直收到错误:无法将预期类型'Bool'与实际类型'[t0]'匹配.我正在尝试获取字符串的用户输入,然后以反向ORDER输出许多字符串.

输入示例:

HI1
HI2
Run Code Online (Sandbox Code Playgroud)

示例输出:

HI2
HI1
Run Code Online (Sandbox Code Playgroud)

我的代码:

    Back :: Int -> IO()
    Back x = do line <- sequence_[getLine|[1..x]]
                     mapM_ print (reverse line)
Run Code Online (Sandbox Code Playgroud)

io haskell map sequence

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