小编Car*_*ate的帖子

我只收到某些编译器的Segfault

我编写了以下代码来加密文本(它远未完成):

#include <iostream>
#include <string>

using namespace std;

class Device {
    string input;
    string encrypted;
    string decrypted;
    string key;
    int keysize;

public:
    Device(string inp) {
        input = inp;
        keysize = 0;
    }

    int give_key(string ikey) {
        key = ikey;
        keysize = key.size();
    }

    string encrypt() {
        if(key != "") {
            for(int enc = 0, keyiter = 0; enc < input.size(); ++enc, ++keyiter) {
                cout << "Starting loop #" << enc << endl;
                if(keyiter == keysize) keyiter = 0; //Reset key …
Run Code Online (Sandbox Code Playgroud)

c++ segmentation-fault

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

为什么在以下示例中不应使用缓冲?

我正在阅读本教程:http: //www.catonmat.net/blog/simple-haskell-tcp-server/ 了解Haskell网络模块的基础知识.他写了一个名为sockHandler的小函数:

sockHandler :: Socket -> IO ()
sockHandler sock = do
    (handle, _, _) <- accept sock
    hSetBuffering handle NoBuffering
    forkIO $ commandProcessor handle
    sockHandler sock
Run Code Online (Sandbox Code Playgroud)

接受连接,并将其分配给新线程.在打破代码的同时,他说:

"接下来我们使用hSetBuffering将客户端套接字句柄的缓冲模式更改为NoBuffering,因此我们没有缓冲惊喜."

但是没有详细说明这一点.他在谈论什么惊喜?我谷歌了,看到了一些安全文章(我猜测与被拦截的缓存有关),但似乎与本教程的内容没什么关系.

有什么问题?我想到了,但我认为我没有足够的网络经验来填补空白.

谢谢.

networking buffer haskell

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

我应该如何组织状态monad中的普通和"状态"版本的函数?

我决定尝试State Monad尝试清理我已经开始的一些项目.我遇到了命名/分区问题.

如果我有以下对象:

data Obj = Player { oPos :: Point }

data World = World { wKeys :: [Key], wPlayer :: Obj }
Run Code Online (Sandbox Code Playgroud)

我可能有一个方便的功能,如:

setPlayer :: Obj -> World -> World
setPlayer o w = w{wPlayer = o}
Run Code Online (Sandbox Code Playgroud)

和匹配的状态操作,如:

setPlayerW :: Obj -> WorldState ()
setPlayerW o = get >>= put . setPlayer o
Run Code Online (Sandbox Code Playgroud)

它使用其他便利功能; 为了方便.

对于这样的事情,典型的命名约定是什么?我用W贴了国家版,但这有点难看.

并且"状态版本"是否典型地与单独文件中的"对象版本"隔离?

我完全错了吗?有没有更好的设置,然后我可能需要2个不同版本的任何操作?

haskell

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

使用dissoc的一元版本?

在使用时dissoc,我注意到它有一个单一的版本似乎没有做任何事情.我检查了源代码,结果证明它只是身份函数:

(defn dissoc
  ([map] map)
  ([map key]
   (. clojure.lang.RT (dissoc map key)))
  ([map key & ks]
   (let [ret (dissoc map key)]
     (if ks
       (recur ret (first ks) (next ks))
       ret))))
Run Code Online (Sandbox Code Playgroud)

然后我注意到它disj有一个一元版本以及相同的定义.

一元版本的目的是什么?我可以看到的唯一潜在用途可能是它们一起使用时apply,但我不知道这有什么用处.为什么他们conjassoc同行没有类似的一元版本呢?

clojure arity

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

Haskell的读取功能说明

我想知道是否有人熟悉readHaskell中的Prelude 函数。

该函数的类型如下。

Read a => String -> a
Run Code Online (Sandbox Code Playgroud)

有人可以通过一些示例向我解释如何使用此函数以及将String强制转换为哪种类型吗?

谢谢

haskell function haskell-prelude

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

如何在增量值中打印范围到python中的递减值

我是python中的新手,我想打印一个范围,但是当我运行程序时,打印任何东西.

dec_value=int(input("ENTER THE DECREMENTED VALUE"))
for i in range(100,0,dec_value):
  print(i)
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么吗?

python printing function range

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

Big-O表示法和循环递归

以下方法中最坏情况的Big-O表示法是什么:

 /**
 * @best-case  O(1)
 * @worst-case O(?)
 *
 * {@link NTree#contains(Comparable)}
 */
public boolean contains(T elem) {

    if (this.data.compareTo(elem) == 0)
        return true;

    for(NTree<T> t : children) {
        if(t != null)
            return t.contains(elem);    
    }


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

这是n元的通用树,每棵树都有n个孩子。最好的情况是elem等于root.data

但是我不确定在最坏的情况下我们必须经历树上的每个孩子。

java algorithm big-o

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

在Clojure序列中修剪周期的不引人注目的方法

我正在尝试编写一个lazy seq来为给定的输入int 生成Collat​​z序列.

我喜欢这个函数,因为它是如此干净地映射到数学定义:

(defn collatz
  "Returns a lazy seq of the Collatz sequence starting at n and ending at 1 (if
  ever)."
  [n]
  (letfn [(next-term [x]
            (if (even? x)
              (/ x 2)
              (inc (* 3 x))))]
    (iterate next-term n)))
Run Code Online (Sandbox Code Playgroud)

问题在于,由于Collat​​z序列的行为方式,这会产生无限的seq:

(take 10 (collatz 5))
  => (5 16 8 4 2 1 4 2 1 4)
Run Code Online (Sandbox Code Playgroud)

我可以通过添加来轻松地删除循环(take-while #(not= 1 %) ...),但是1 序列的一部分.我认为所有其他的方法都会在一个丑陋之后修剪周期,并使Collat​​z序列的数学核心模糊不清.

(我已经考虑将看到的值存储在一个原子中并在take-while谓词中使用它,或者只是在一个原子中存储一个标志以达到类似的效果.但我觉得有一些更好,更漂亮,更少侵入性的方式来做我所做的事情.想要在这里.)

所以我的问题是:在无限序列中检测和修剪周期的干净方法是什么?或者,我可以以某种方式(可能使用for)生成我的懒惰seq,当它达到1(包括)时自动修剪?

clojure

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

是否可以在c中传递两个参数?

我已经写了一个C程序,在其中声明了一个函数reverse(int i)。当我编译并运行该程序时,尽管传递了两个这样的参数,它仍然可以正常运行reverse((i++, i))。为什么这不会引起语法错误?reverse期待一个论点。

  #include <stdio.h>
    void reverse(int i);
    int main()
    { 
            reverse(1); 

    }
    void reverse(int i)
    {
            if (i > 5)
                    return ;
            printf("%d ", i); 
            return reverse((i++, i));
    }
Run Code Online (Sandbox Code Playgroud)

c operator-precedence

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

在不使用匿名函数的情况下创建函数适配器

I'm writing a Linked List implementation and want to create a foreach function. I want to have two versions of this function: one for internal use that iterates over the nodes themselves, and one for the end user that iterates over the data held in the nodes. Since the code will be nearly the same for each, I'd like to define the second version in terms of the first. Right now, I have two typedefs for the functions used …

c functional-programming c11

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