标签: s-expression

将C写为s表达式

我想在s表达式中编写C并使用编译时宏.有人知道有什么事吗?它应该将s表达式转换为标准C.

c lisp s-expression

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

如何安全地读取不受信任的Clojure代码(不仅仅是一些序列化数据)?

(def evil-code (str "(" (slurp "/mnt/src/git/clj/clojure/src/clj/clojure/core.clj") ")" ))
(def r (read-string evil-code ))
Run Code Online (Sandbox Code Playgroud)

工作,但不安全

(def r (clojure.edn/read-string evil-code))
RuntimeException Map literal must contain an even number of forms  clojure.lang.Util.runtimeException (Util.java:219)
Run Code Online (Sandbox Code Playgroud)

不起作用......

如何安全地阅读Clojure代码(将所有'#s本身作为自己的东西)保存到树中?想象一下,Clojure防病毒软件希望扫描代码中的威胁,并希望使用数据结构,而不是使用纯文本.

clojure s-expression

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

任何lisps都有一个s表达式,例如((f 2)3 4)?如果没有,为什么?

任何lisps支持嵌套的s表达式吗?例如

((f 2) 3 4)
Run Code Online (Sandbox Code Playgroud)

对于这(f 2)大概计算一个函数/宏应用上3 4.

是否可以让lisp支持这样的事情?或者是否有技术限制禁止这种做法/使其不切实际?

lisp nested head s-expression lisp-2

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

XML,S表达式和重叠范围......它叫什么?

我在读XML不是S-Expressions.XML范围是一种严格的,S表达式也是如此.在我见过的每种编程语言中,你都不能拥有以下内容:

<b>BOLD <i>BOTH </b>ITALIC</i>== BOLD BOTH ITALIC

它甚至不能用S-Expressions表达:

(bold "BOLD" (italic "BOTH" ) "ITALIC" ) == :(

是否有任何编程语言支持这种"重叠"范围?它有什么实际用途吗?

html lisp xml scope s-expression

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

有没有什么是s表达式XPATH是什么用于XML?

如果可能的话,我正在寻找一个普通的lisp impl.(另外,我不想将sexp转换为XML并在结果上使用xpath.)

lisp xml xpath s-expression

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

常见的lisp:输入数学表达式有一种不那么痛苦的方法吗?

我喜欢常见的口齿不清,但有时输入简单的数学表达式是非常痛苦的

a(8b^2+1)+4bc(4b^2+1)
Run Code Online (Sandbox Code Playgroud)

(当然我可以转换它,但它有点慢,我先写(+()()),然后在每个括号中我放(*()())...)

我想知道这里是否有人知道更好的输入方法.我正在考虑编写一个数学宏,在哪里

(math “a(8b^2+1)+4bc(4b^2+1)”) 
Run Code Online (Sandbox Code Playgroud)

扩展到

(+ (* a (1+ (* 8 b b))) (* 4 b c (1+ (* 4 b b))))
Run Code Online (Sandbox Code Playgroud)

但解析是名称很长的变量的问题.

有人有更好的建议吗?

common-lisp infix-notation prefix s-expression reader-macro

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

sexplib如何与地图等仿函数类型一起使用?

Sexplib的语法扩展使得OCaml中的任意用户定义数据结构的序列化和反序列化变得容易.通常通过with sexp在类型定义的末尾添加注释来完成:

type a = A of int | B of float with sexp
Run Code Online (Sandbox Code Playgroud)

这似乎不直接推广到基于仿函数的类型,也不清楚Sexplib标准类型转换器如何捕获甚至标准仿函数.

到目前为止,我已经通过int Map.Make(String).t在序列化之前将特定的Map类型实例(例如)展平到列表来解决这个问题,反之亦然,但是肯定这一点并没有完全被Sexplib/Jane Street Core的雄心勃勃的作者所忽视.我还注意到版本的电池在自定义性别序列化中混合了它们的主要模块,如[Bat] Map,但这已被删除了一段时间.

如何使用Sexplib序列化常用的地图或其他复杂仿函数类型?

ocaml s-expression

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

Clojure的Slurpage和barfage

我正在使用vim-sexpvim-sexp-mappings-for-regular-people插件来编辑Clojure文件.我不太明白什么是slurpbarf命令.

我试着和他们一起玩,似乎他们在相邻表格的开头/结尾插入/删除表格.那是对的吗?如果没有,什么是slurpbarf的正确定义?

vim clojure paredit s-expression

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

是否有类似Awk或Lisp的编程语言可以处理s表达式流?

我最近在KiCad中创建了一些PCB封装,它们存储在s-expression文件中,其数据如下所示:

(fp_text user %R (at 0 5.08) (layer F.Fab)
  (effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -27.04996 -3.986) (end -27.24996 -3.786) (layer F.Fab) (width 0.1))
(pad "" np_thru_hole circle (at 35.56 0) (size 3.175 3.175) (drill 3.175) (layers *.Cu *.Mask)
  (clearance 1.5875))
(pad 96 smd rect (at 1.25 3.08473) (size 0.29972 1.45034) (layers F.Cu F.Paste F.Mask)
  (clearance 0.09906))
Run Code Online (Sandbox Code Playgroud)

我希望能够编写shell one-liners来有效地编辑多个参数.我通常会使用Awk这样的东西,但是s表达式的递归性质使它不适合这项任务.我想知道是否存在一种带有解释器的编程语言,用于处理管道数据并且可以本地处理s表达式.也许Lisp的数据驱动方言会这样做,但我不知道在哪里看.

总之,我希望能够以类似于Awk允许我逐行处理数据列的方式快速编辑s表达式文件; 仅在s表达式的情况下,处理将逐级执行.

例如:发现所有的的pad类型的表达式smd(size 0.29972 1.45034),并重新编号基于其位置每一个.

lisp awk pipe s-expression

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

什么是 S 表达式

所有 Lisp 开发人员似乎都知道什么是 S 表达式。但有人能为非 Lisp 开发者解释一下这一点吗?

已经有一个维基百科条目(https://en.wikipedia.org/wiki/S-expression)。但如果您不想深入了解细节,那么这并没有多大帮助。

什么是 S 表达式?我可以用 S-Expression 表达什么?Lisp 通常使用 S 表达式的目的是什么?S 表达式只与 Lisp 开发人员相关吗?

lisp representation data-representation s-expression

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