首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lisp代码(s-expression)格式化程序

Lisp代码(s-expression)格式化程序
EN

Stack Overflow用户
提问于 2012-10-20 23:45:06
回答 2查看 1.6K关注 0票数 4

jSIMLIB检查器打印出本质上是lisp代码的s表达式代码

代码语言:javascript
复制
(set-option :print-success false) 
(set-logic QF_LIA) 
(declare-fun RETURN () Int)
(declare-fun refs_1_SYMINT () Int)
(declare-fun flags_2_SYMINT () Int)
(assert+ ( and ( or ( and (/= flags_2_SYMINT 0) (and (= RETURN flags_2_SYMINT)) ) ( and (/= refs_1_SYMINT 0) (and (= flags_2_SYMINT 0)) (and (= RETURN refs_1_SYMINT)) ) ( and (and (= refs_1_SYMINT 0)) (and (= flags_2_SYMINT 0)) (and (= RETURN 100)) ) ) ( not ( or ( and (/= flags_2_SYMINT 0) (and (= RETURN flags_2_SYMINT)) ) ( and (/= refs_1_SYMINT 0) (and (= flags_2_SYMINT 0)) (and (= RETURN refs_1_SYMINT)) ) ( and (and (= refs_1_SYMINT 0)) (and (= flags_2_SYMINT 0)) (and (= RETURN 10)) ) ) ) ) )
(check)
(exit)

我如何格式化代码,最好是使用emacs或TextMate?例如:

代码语言:javascript
复制
(set-option :print-success false) 
(set-logic QF_LIA) 
(declare-fun RETURN () Int)
(declare-fun refs_1_SYMINT () Int)
(declare-fun flags_2_SYMINT () Int)
(assert 
  (and  
    (and 
      (and  
        (distinct  flags_2_SYMINT 0)  
        (=  RETURN flags_2_SYMINT))
      (=  refs_1_SYMINT refs1_1_SYMINT)
      (=  flags_2_SYMINT flags1_2_SYMINT))
    (not 
      (and  
        (distinct  flags_2_SYMINT 0) 
        (=  RETURN flags_2_SYMINT))))) 
(check-sat)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-21 02:40:53

在GNU Emacs中,您可以使用indent-pp-sexp

将s表达式前的光标设置为pretty-print并键入c-u m-x indent-pp-sexp

票数 8
EN

Stack Overflow用户

发布于 2012-10-21 00:26:50

pp函数可以很好地打印出来,但可能不完全匹配您想要的格式。

下面是你的问题中的一行:

代码语言:javascript
复制
(pp '(assert+ ( and ( or ( and (/= flags_2_SYMINT 0) (and (= RETURN flags_2_SYMINT)) ) ( and (/= refs_1_SYMINT 0) (and (= flags_2_SYMINT 0)) (and (= RETURN refs_1_SYMINT)) ) ( and (and (= refs_1_SYMINT 0)) (and (= flags_2_SYMINT 0)) (and (= RETURN 100)) ) ) ( not ( or ( and (/= flags_2_SYMINT 0) (and (= RETURN flags_2_SYMINT)) ) ( and (/= refs_1_SYMINT 0) (and (= flags_2_SYMINT 0)) (and (= RETURN refs_1_SYMINT)) ) ( and (and (= refs_1_SYMINT 0)) (and (= flags_2_SYMINT 0)) (and (= RETURN 10)) ) ) ) ) ))

输出为:

代码语言:javascript
复制
(assert+
 (and
  (or
   (and
    (/= flags_2_SYMINT 0)
    (and
     (= RETURN flags_2_SYMINT)))
   (and
    (/= refs_1_SYMINT 0)
    (and
     (= flags_2_SYMINT 0))
    (and
     (= RETURN refs_1_SYMINT)))
   (and
    (and
     (= refs_1_SYMINT 0))
    (and
     (= flags_2_SYMINT 0))
    (and
     (= RETURN 100))))
  (not
   (or
    (and
     (/= flags_2_SYMINT 0)
     (and
      (= RETURN flags_2_SYMINT)))
    (and
     (/= refs_1_SYMINT 0)
     (and
      (= flags_2_SYMINT 0))
     (and
      (= RETURN refs_1_SYMINT)))
    (and
     (and
      (= refs_1_SYMINT 0))
     (and
      (= flags_2_SYMINT 0))
     (and
      (= RETURN 10)))))))
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12990052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档