小编ccQ*_*ein的帖子

浏览器如何知道站点是否支持 HTTP/3?

我有一个与浏览器如何知道站点是否支持 HTTP/2?。我想知道浏览器如何知道网站支持http3。

我正在使用 safari 并打开了 http3 支持。然后我去https://cloudflare-quic.com,协议是h3-29。我认为我的 safari 使用 h3 协议探索这个网站。它是怎么知道的呢?

http quic http3

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

如何使用sbcl使用shell命令

我想编写一个直接打开文件的功能。就像Python代码一样:

os.system("ls")
Run Code Online (Sandbox Code Playgroud)

例如,当我使用此功能(fun_open“/path/to/file”)时,系统将使用默认应用程序打开文件。如果文件是 .txt,请使用 textedit 打开它。

怎样制作呢?

----更新 9/24/2015-----

我的代码是:

(defun open_by_system (dir)
  (sb-ext:run-program "/usr/bin/open" (list "-a" "Preview" dir)))
Run Code Online (Sandbox Code Playgroud)

我用它:

CL-USER> (open_by_system "~/Desktop/ML.pdf")
#<SB-IMPL::PROCESS :EXITED 1>
Run Code Online (Sandbox Code Playgroud)

没有其他事情发生

shell common-lisp

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

Common Lisp 中 #+: 和 #-: 的含义是什么

今晚我在读cl-fad/load.lisp代码,发现表达式或字符串前面有符号#+:和。#-:

这些符号的含义是什么?

lisp common-lisp reader-macro

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

使用Sharpsign Dot有什么好处?

我最近使用过cl-ppcre软件包,我对它们如何优化此软件包感到非常好奇,因为我想学习优化常见的Lisp。我注意到他们在声明表达式中经常使用Sharpsign Dot,就像这里。优化设置在此处

他们为什么这样写?有什么好处吗?还是有一些规则要做?

更新:我跑步

(defvar *b* '(optimize speed))
(pprint (macroexpand-1 '(declaim *b*)))
(pprint (macroexpand-1 '(declaim #.*b*))) ;; => this one is right
Run Code Online (Sandbox Code Playgroud)

那么,#.在宏调用之前,eval值会否?像它一样先评估该值,然后将其替换为宏参数。

lisp common-lisp reader

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

SBCL 的内联编译和块编译有什么区别?

几周前,SBCL 更新了 2.0.2 并带来了 Block 编译功能。我已经阅读了这篇文章以了解它是什么。

我有一个问题,(declaim (inline 'some-function))和 Block 编译有什么区别?块编译是由编译器自动进行的吗?

谢谢。

lisp compilation sbcl common-lisp

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

在宏中写`loop ... collect`时的问题

家伙.

今天我想编写sigma宏来计算灵活表达式输入的总和.

下面的代码是我今天下午写的.但它不符合我的目的.

(defmacro sigma (exp ll)
  `(+ ,@(loop for i in ll collect
             (progn (setf (elt exp 1) i)
                    (print exp)
                    exp)))
  )

>>(pprint (macroexpand-1 '(sigma (+ 1 2) (2 3 4))))
>>(+ 2 2) 
  (+ 3 2) 
  (+ 4 2) 
  (+ (+ 4 2) (+ 4 2) (+ 4 2))
Run Code Online (Sandbox Code Playgroud)

我希望它有效,(+ (+ 2 2) (+ 3 2) (+ 4 2))loop collect给我一个奇怪的答案.

它为什么这样工作?我有一些方法可以解决这个问题吗?

lisp macros clisp common-lisp

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

关于Rust中Vector的特征索引实现

我检查doc中的Index trait并找到index()is的返回类型&T.

然后我写这个函数来从vector获取值:

fn get_value_test(a: usize, v: &Vec<i32>) -> i32 {
    v[a]
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么v[a]i32不过&i32?因为i32 ...have a known size at compile time are stored entirely on the stack, so copies of the actual values are quick to make?(从这里)

看起来Rust在这种情况下有隐藏规则转换类型?

rust

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

在编译期间声明特殊变量时会发生什么

我只是在我的Common Lisp代码遇到异常情况时,我想测试locallydeclare

(defvar test-out 2) ;; make a dynamic variable

;; function below just simply re-write from locally doc
(defun test (out)
  (declare (special out))
  (let ((out 1))
    (print out) ;; => 1
    (print (locally (declare (special out)) out)))) ;; => 2

;; when argument has same name as outside dynamic variable
(defun test1 (test-out)
  (declare (special test-out))
  (let ((test-out 1))
    (print test-out) ;; => 1
    (print (locally (declare (special test-out)) test-out)))) ;; => also 1 …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp dynamic-binding

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

Common Lisp 编译顺序问题

我在一个文件中写了一个宏和一个函数,如下所示:

(defun test ()
  (let ((x '(1 2 3)))
    (macro-test (x real-b)
      (print (+ 1 (car real-b))))))

(defmacro macro-test ((a b) &body body)
  `(do ((,b ,a (cdr ,b)))
       ((not ,b))
     ,@body))
Run Code Online (Sandbox Code Playgroud)

然后我在 repl 中加载这个文件并运行(test). 我收到此错误:

The variable REAL-B is unbound.
Run Code Online (Sandbox Code Playgroud)

然而,当我defmacro 之前defun. 一切安好。

我对常见的 lisp 编译顺序感到困惑。我知道如果defmacro在里面使用一些函数,那些函数应该(eval-when (:compile-toplevel :load-toplevel :execute)),否则编译会失败。

但是,如果编译时宏定义和函数定义相同,那么顺序就是问题,对吗?宏应位于使用它们之前的位置(如果我创建两个函数,则顺序无关紧要)。我可以得到更多关于 SBCL 编译顺序的细节吗?它仅适用于 SBCL 吗?还是按照 Common Lisp 的标准?

谢谢!

lisp macros compilation sbcl common-lisp

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

为什么Scala在for循环中返回Unit值类型?

我写了一个for循环来遍历Map,我希望这个函数在找到某个值时立即返回键(键和值都是Int类型)

var hs:Map[Int,Int] = Map(1 -> 1, 2 -> 2)
for ((k,v) <- hs) {
  if (v == 1)
    return k   
}
Run Code Online (Sandbox Code Playgroud)

但是,scala 给我错误消息:

error: type mismatch;
 found   : Unit
 required: Int
  for ((k,v) <- hst)
             ^
one error found
Run Code Online (Sandbox Code Playgroud)

然后我改为

var result = 0
for ((k, v) <- hst){
  if (v == 1)
    result = k
}
result
Run Code Online (Sandbox Code Playgroud)

然后,效果很好。为什么第一个版本存在类型问题?

scala

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

在 Rust 中实现链表时如何复制原始指针?

我正在ListNode用 Rust编写递归类型。我必须Box在结构中使用,并且我正在尝试编写一个循环来添加next ListNode. 但是,我想尝试使用除递归方法之外的指针。

#[derive(Debug)]
struct ListNode {
    val: i32,
    next: Option<Box<ListNode>>,
}

impl ListNode {
    fn new(i: i32) -> Self {
        ListNode { val: i, next: None }
    }

    fn add_l(&mut self, l: &Vec<i32>) {
        let mut p: *mut ListNode = self as *mut ListNode;
        for i in l {
            unsafe {
                (*p).next = Some(Box::new(ListNode::new(*i)));
                let temp_b = Box::from_raw(p);
                p = Box::into_raw(temp_b.next.wrap());
            };
        }
    }
}

fn main() {
    let mut a = …
Run Code Online (Sandbox Code Playgroud)

rust

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

如何在 Common Lisp 中声明列表类型?

我找到了通用 lisp 的所有类型说明符。还有就是list里面。但是list在 Common Lisp 中没有象数组那样声明的例子,(declare (array fixnum 10)).

那么,声明列表类型说明符的正确方法是什么?谢谢

common-lisp

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

Haskell 模式匹配将 Map.empty any 与任何 Map.Map kv 匹配

我正在编写一个函数,该函数根据Map.Map参数中的 Map 是否为空而具有不同的操作

这是我的代码:

import qualified Data.Map.Lazy as Map

testF :: (Ord a, Num a) => Map.Map a a -> [a] -> [a]
testF empty _  = [1024]
testF _ []     = []
testF m (x:xs) = [x] ++ (testF m xs)

main = do
  let a = Map.fromList [(1,2), (3,4)]
  print $ testF Map.empty [1,2,3] -- show [1024]
  print $ testF a [1,2,3] -- show [1024] too
  print $ a == Map.empty -- False
Run Code Online (Sandbox Code Playgroud)

当然,GHC 已经通知我最新的功能行是多余的。

Pattern …
Run Code Online (Sandbox Code Playgroud)

haskell pattern-matching

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