小编dem*_*emi的帖子

简化可能的表达式

我有以下代码,我觉得它很难看:

loginCheck = do
  ml <- getPostParam "login" -- ml and mp :: Maybe ByteString
  mp <- getPostParam "password"
  if isJust ml && isJust mp
    then authAs (fromJust ml) (fromJust mp)
    else render "Msg" [("text", "Form incomplete")]
Run Code Online (Sandbox Code Playgroud)

这段代码似乎非常迫切.我可以以某种方式简化它吗?

haskell

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

OpenGL ES 2:制服和属性

众所周知,统一和属性是GPU中的寄存器.我的问题是当不同的程序绑定时会发生什么?先前设置的制服和/或属性指针的标准保证是否会被重新加载,或者我是否需要手动重新加载它们?我想创建缓存系统.对我来说,当程序反弹时,属性不会重新加载(是吗?),制服怎么样?GL ES驱动程序是否为我重新加载它们的值?

opengl-es

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

懒惰与急切的评估和双链表建设

我睡不着!:)

我在Haskell编写了一个构建双链表的小程序.基本语言的属性是懒惰的评估(参见下面的一堆代码).我的问题是,我可以做在同一个纯粹的功能性语言急于评估或不?在任何情况下,渴望功能语言必须具备哪些属性才能构建这样的结构(杂质?)?

import Data.List

data DLList a = DLNull |
    DLNode { prev :: DLList a
           , x :: a
           , next :: DLList a
           }
  deriving (Show)

walkDLList :: (DLList a -> DLList a) -> DLList a -> [a]
walkDLList _ DLNull = []
walkDLList f n@(DLNode _ x _)  = x : walkDLList f (f n)

-- Returns first and last items.
makeDLList :: [a] -> (DLList a, DLList a)
makeDLList xs …
Run Code Online (Sandbox Code Playgroud)

haskell list eager lazy-evaluation

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

解释Haskell空导入列表()

我看到很多行import HSP.ServerPartT()- 导入列表是空的.为什么这样做?只是没有导入这个模块有什么区别?

haskell

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

Java过滤器列表到泛型类型T.

我该怎么做(不编译):

<T> List<T> getElementsOf() {
    return list.stream()
            .filter(x -> x instanceof T)
            .map(x -> (T) x)
            .collect(toList());
}
Run Code Online (Sandbox Code Playgroud)

什么是用法的例子?理想情况下,应该是这样的obj.<Derived>getElementsOf().

java

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

C++成员布局

我们有一个简单的结构(POD).

struct xyz
{
    float x, y, z;
};
Run Code Online (Sandbox Code Playgroud)

我可以假设以下代码没问题吗?我可以假设没有任何差距吗?标准说的是什么?对于POD来说是真的吗?课程是真的吗?

xyz v;
float* p = &v.x;
p[0] = 1.0f;
p[1] = 2.0f; // Is it ok?
p[2] = 3.0f; // Is it ok?
Run Code Online (Sandbox Code Playgroud)

c c++ layout pointers member

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

嵌入式计划解释器

我知道Lua是嵌入类中最好的,但是我想使用Scheme或某些LISP方言作为C应用程序的脚本语言。要嵌入哪些好的口译员?我的标准是:

  • 开源(最好是C语言-我认为大多数都是)。
  • R5RS非常受鼓励,SRFI则更佳。
  • 使用C轻松进行FFI(双向)-非常重要。
  • 应该保持最新,不死的项目。
  • 性能媲美Lua。
  • 可移植(至少GNU / Linux-MacOS-Windows(MinGW / Cygwin可接受)。

我不在乎:

  • 大型库(使用简单的FFI,我可以添加缺失项),但这是一个加号。
  • 尺寸。我计划在台式机而不是Android / iOS上运行它。
  • 丰富的文档。一些带有FFI的样品可能就足够了。

现在,我考虑以下几点:

  • GNU Guile。看起来很合适,但是我不了解性能(是VM还是解释的?)。
  • newLISP。全新的,有文档记录,但不确定性能和嵌入方式。
  • TinyScheme /《 K.O。小拳王》。R5RS非常小,适合嵌入。不确定性能。

lisp scheme interpreter

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

Clojure中的斐波纳契数

我正在学习Clojure.相当基本的任务是生成斐波纳契数列.我最终得到了必要的解决方案的副本(并且列表是相反的,呵呵):

(defn n-fib [n]
  (if (= n 1) '(1)
  (loop [i 2 l '(1 1)]
    (if (= i n)
        l
        (recur (inc i) (cons (+ (fst l) (snd l)) l))))))
Run Code Online (Sandbox Code Playgroud)

什么是更好的方式,更实用,更简洁?懒惰的序列?怎么用?例如,在使用懒惰的Haskell中,我可以写一个衬垫:

fib = 1 : 1 : zipWith + (tail fib) 
Run Code Online (Sandbox Code Playgroud)

请注意,Haskell解决方案提供无限序列(懒惰......).如果Clojure既有渴望也有懒惰的解决方案(即使是获得n长度列表),我想知道两者.

更新:我得到的另一个解决方案不是反转列表,而是使用堆栈生成它:

(defn n-fib [n]
  (defn gen [i a b]
    (if (= i 0)
        ()
        (cons (+ a b) (gen (dec i) b (+ a b)))))
  (gen n 0 1))
Run Code Online (Sandbox Code Playgroud)

functional-programming clojure

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

Clojure:我的切入点在哪里?

通常,Clojure应用程序具有-main入口点.我正在玩Compojure:

(defroutes app-routes
   (GET "/" [] handle-index)
   ...)

(def app
  (compojure.handler/site app-routes))
Run Code Online (Sandbox Code Playgroud)

这个申请的切入点在哪里?某处环,因为要运行的命令是这样的:lein ring server-headless?在任何情况下,命名空间中入口点的功能是什么?

clojure

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

SQLite:删除大量行的有效方法

SQlite,Android,真实故事。我有一张表,用作缓存:

CREATE TABLE cache(key TEXT, ts TIMESTAMP, size INTEGER, data BLOB);
CREATE UNIQUE INDEX by_key ON cache(key);
CREATE INDEX by_ts ON cache(ts);
Run Code Online (Sandbox Code Playgroud)

在应用程序生命周期中,我填充了缓存,在某些时候我想清除它并删除N记录。通常,该表将包含 ~25000 个 blob,每个 blob 约为 100-500Kb,数据库中的 blob 总大小为 600-800Mb,但现在我测试了 ~2000,大约为 60Mb(以下数字适用于这种情况)。清除会删除 90% 的缓存条目。

我尝试了不同的方法来做到这一点,这里简要说明:

[1]最差也最简单。先选择,再一一移除,行走光标。慢得可怕。

[2] 使用SQLite 来做查询(删除其中包含完全N字节的blob ):

DELETE FROM blobs WHERE
  ROWID IN (SELECT ROWID FROM blobs WHERE 
             (SELECT SUM(size) FROM blobs AS _ WHERE ts <= blobs.ts) <= N);
Run Code Online (Sandbox Code Playgroud)

这更快,但仍然非常慢:~15 秒。似乎它也具有二次复杂性。

[3]选择删除位置周围的行(使用平均 blob 大小进行计算)并使用简单WHERE子句删除:

-- …
Run Code Online (Sandbox Code Playgroud)

sql sqlite android

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