标签: s-expression

如何评估前缀表示法中的表达式

我试图评估一个表示前缀表示法中的表达式的列表.以下是此类列表的示例:

[+, [sin, 3], [- 10 5]]
Run Code Online (Sandbox Code Playgroud)

评估列表值的最佳方法是什么

evaluation expression-trees s-expression

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

实时显示s表达式

我想写这样的Lisp/Scheme/Clojure代码

(map inc (range 0 5)) 
Run Code Online (Sandbox Code Playgroud)

让它像这样可视化

map -- inc
   \\
       range -- 0
           \  
             -- 5
Run Code Online (Sandbox Code Playgroud)

当我操纵我的表情时,我希望看到树实时变化.随着树木变大,布局将变得重要.

有没有工具可以做到这一点?我怀疑Emacs世界可能存在某些东西.

lisp emacs clojure code-visualization s-expression

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

Ruby的AST中'send'关键字的含义是什么?

我正在尝试学习Ruby词法分析器和解析器(whitequark解析器)以了解有关从Ruby脚本进一步生成机器代码的过程的更多信息.

在解析以下Ruby代码字符串时.

def add(a, b)
    return a + b
end

puts add 1, 2
Run Code Online (Sandbox Code Playgroud)

它导致以下S表达式表示法.

s(:begin,
    s(:def, :add,
        s(:args,
            s(:arg, :a),
            s(:arg, :b)),
        s(:return,
            s(:send,
                s(:lvar, :a), :+,
                s(:lvar, :b)))),
    s(:send, nil, :puts,
        s(:send, nil, :add,
            s(:int, 1),
            s(:int, 3))))
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释一下:在结果S表达式表示法中发送关键字的定义?

ruby parsing abstract-syntax-tree s-expression ruby-ripper

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

组织模式表到s表达式

我想从Org-Mode表导出到s表达式.

| first  | second | thrid  |
|--------+--------+--------|
| value1 | value2 | value3 |
| value4 | value5 | value6 |
Run Code Online (Sandbox Code Playgroud)

会变成:

((:FIRST "value1" :SECOND "value2" :THIRD "value3")
 (:FIRST "value4" :SECOND "value5" :THIRD "value6"))
Run Code Online (Sandbox Code Playgroud)

我计划编写这样的设置,如果它还不存在,但我想在开始重新发明轮子之前我会进入stackoverflow.

emacs org-mode s-expression

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

为什么我们需要`nil`?

我不明白为什么我们需要nil[1]什么时候到cons一个序列(所谓的正确列表)的项目.在我看来,我们可以通过单独使用所谓的不正确列表(cons没有结束的-ed对nil)来实现相同的目标.由于Lisps [2]已经提供了一个原始过程来区分a pair?和一个原子(某些实现甚至提供atom?),所以当在列表上定义一个过程时,例如length,我可以只用虚线对做同样的事情,如下所示:

(define len
  (lambda (l)
    (cond ((pair? l) (+ 1 (len (cdr l))))
          (else 1) ) ) )
Run Code Online (Sandbox Code Playgroud)

显而易见的是,与传统方法相比,我们可以将此程序应用于不正确的列表,'(1 . (2 . 3))以获得预期的答案.3(length '(1 2 3))

我想听听任何捍卫必要性的意见nil.提前致谢.

[1]让我们忽略的争论焦点nil/ NIL,'()().

[2]这意味着Lisp语言系列.

lisp scheme s-expression

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

在Emacs中sexp和列表之间的区别?

在Emacs中,有一些命令可以将光标移动到括号(或任何括号)中分隔的表达式中,即forward-sexp,reverse-sexp,forward-list和backward-list.在Lisp和任何其他代码中它们的行为类似,所以我看到*-sexp和*-list之间没有区别,除了最后一个在注释或引号内不起作用.

sexp和list命令之间的功能区别是什么,我何时应该使用哪个?

以防万一,我理解上行列表和下行列表命令,它们与主题无关.

emacs elisp delimiter parentheses s-expression

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

S表达式解析

我今天早些时候遇到了这个问题:

示例输入:我遇到Joe和Jill然后我们去购物
示例输出: [TOP [S [S [NP [PRP I]] [VP [VBD run] [PP [IN into] [NP [NNP Joe] [CC和[NNP Jill]]]]] [CC和] [S [ADVP [RB然后]] [NP [PRP我们]] [VP [VBD去] [NP [NN购物]]]]]]

在此输入图像描述

我打算建议简单地将预期输出(因为它看起来像一个s表达式)解析为一个对象(在我们的例子中是一个树),然后使用简单的LINQ方法来处理它.但令我惊讶的是,我无法找到C#s-expression解析器.

我唯一能想到的是使用Clojure解析它,因为它编译成clr,我不确定它是一个很好的解决方案.

顺便说一句,我不介意输出类型的答案dynamic.我在这里找到的答案只是用于反序列化为特定模式.

总结一下我的问题: 我需要在C#中反序列化s表达式(序列化对于这个问题的未来读者来说会很好)

c# clojure s-expression

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

有向无环图的 S 表达式?

正如我们所知,树结构可以用 S 表达式表示。例如

 (5 (4 (11 (7 () ()) (2 () ()) ) ()) (8 (13 () ()) (4 () (1 () ()) ) ) )
Run Code Online (Sandbox Code Playgroud)

但是是否可以将 S 表达式用于图形(尤其是 DAG)?例如

我的第二个问题是 S-expression 的拓扑极限可以表示什么?

我在谷歌上搜索了这个问题并找不到线索,没有正式的 CS 背景,我自己很难弄清楚。请不要关闭这个问题。提前致谢!

graph-theory topology s-expression directed-acyclic-graphs

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

如何在不使用 alist 的情况下生成没有默认值的配对列表?

我正在尝试对 R 代码进行简单操作,并尝试生成一个相当于

substitute(function(x) x)
Run Code Online (Sandbox Code Playgroud)

我知道我可以围绕这些事情做一些事情

as.call(list(as.symbol("function"), as.pairlist(alist(x=)), as.symbol("x")))

Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种as.pairlist(alist(x=))无需求助的方法alist,或者如果不可能的话,允许我生成等效的表达式,而无需对事物进行硬编码或解析字符串。

我正在修补诸如 之类的东西as.call(list(as.symbol("="), as.symbol("x"))),但这现在似乎是一个死胡同。

r metaprogramming s-expression

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

使用clojure读/读字符串函数,我如何在.clj文件中读取对象列表

标题是,如果我这样做

(read-string (slurp "somefile"))
Run Code Online (Sandbox Code Playgroud)

这只会给我文件中的第一个对象,这意味着"somefile"如下所示:

(a obj) (b obj)
Run Code Online (Sandbox Code Playgroud)

然后我只得到(一个obj)作为结果.

我如何得到所有对象的列表,像这样?

((a obj) (b obj))
Run Code Online (Sandbox Code Playgroud)

谢谢.

clojure s-expression

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