小编Sal*_*Egg的帖子

common-lisp 中有“元组”等价的东西吗?

在我的项目中,我有很多坐标需要处理,在 2D 情况下,我发现 的构建比和(cons x y)更快。(list x y)(vector x y)

但是,我不知道如何扩展cons到 3D 或更进一步,因为我没有找到类似cons3. tuplecommon-lisp 中有快速的解决方案吗?

为了便于说明,我做了以下测试:

* (time (loop repeat 10000 do (loop repeat 10000 collect (cons (random 10) (random 10)))))

Evaluation took:
  7.729 seconds of real time
  7.576000 seconds of total run time (7.564000 user, 0.012000 system)
  [ Run times consist of 0.068 seconds GC time, and 7.508 seconds non-GC time. ]
  98.02% CPU
  22,671,859,477 processor cycles
  3,200,156,768 bytes consed …
Run Code Online (Sandbox Code Playgroud)

tuples common-lisp

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

如何强制Haskell检查列表的长度?

我们可以定义函数f,g像这样:

f :: [a] -> [a] -> [a]
f = (++)

g :: [a] -> [a] -> [a]
g = zipWith (+)
Run Code Online (Sandbox Code Playgroud)

双方fg采取两个列表作为参数,并返回一个新的列表,但它们是不同的:f返回一个列表较长,其长度的输入的总和,同时g处理列出与相同的长度.如何计算出Haskell?

haskell types type-level-computation

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

如何回收无法访问的对象以备将来在Common Lisp中使用?

我正在使用gsllantik进行一些科学计算,我发现antik不重用无法访问的对象并且总是分配新的对象,这使我的程序变慢.

例如,有一个名为lu-invertin 的函数gsll,它计算给定矩阵的反转,并且可以指定可选的目标对象.如果我指定目标对象,lu-invert则会将结果存储到该对象中.否则,lu-invert将分配一个新对象来存储结果.

我比较了两种情况的时间消耗,前者比后者快得多.但是,始终为这些功能指定目标对象非常不方便.

我想知道是否有一种方法可以自动回收和重用无法访问的对象,而不是总是分配新的对象.

common-lisp recycle

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

是否可以将宏扩展为几个元素?

我想一个宏my-macro可以扩展到1 2 3不是(1 2 3),这样

(list (my-macro) 4 5) -> (1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)

这可能吗?

macros common-lisp

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

如何简化这种Python代码?

我有很多这样的代码块:

try:
  a = get_a()
  try:
    b = get_b()

    # varying codes here, where a and b are used

  finally:
    if b:
      cleanup(b)
finally:
  if a:
    cleanup(a)
Run Code Online (Sandbox Code Playgroud)

我希望写一些像这样的魔术代码:

some_magic:
  # varying codes here, where a and b are also available
Run Code Online (Sandbox Code Playgroud)

这可能吗?

python

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

如何在`declare`中扩展一个类型说明符?

我正在使用Common Lisp,我有多个函数使用相同类型的数据,我declare用来指定这样的符号类型:

(defun foo (x)
  (declare (type single-float x))
  ...)

(defun bar (x y)
  (declare (type single-float x y))
  ...)
Run Code Online (Sandbox Code Playgroud)

现在,我想存储single-float到像一个自定义符号changable-float,这样我可以很容易地改变所有类型的这些功能(例如,从single-floatdouble-float).我试过这些代码,但它不起作用:

(defvar changeable-float 'single-float)

(defun foo (x)
  (declare (type changeable-float x))
  ...)

(defun bar (x y)
  (declare (type changeable-float x y))
  ...)
Run Code Online (Sandbox Code Playgroud)

我该如何实现这个想法?

macros common-lisp

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