emacs lisp 编程求助

哈咯大家好,最近在刷SICP,其中使用的语言是 scheme。 里面有个练习是这样的: ((if (> b 0) + -) a b)) 这个语句会根据 b 的正负决定是 (+ a b) 还是 (- a b) 我想问一下这个表达在 elisp 中要怎么写呢? 我能像到的如下 (eval `(,(if (> b 0) #’+ #’-) a b) 不知道有没有更好的写法呢?

b正就加,负就减

你本质就是 a + b的绝对值啊

(let ((a 1)
      (b 2))
  (funcall
   (if (> b 0) #'+ #'-)
   a
   b))
3 个赞

我知道勒, 我就想问问elisp里有没有什么表达写法, 嘿嘿 。主要是书里比较强调代码表达

你就搜索elisp 绝对值函数啊,我记得是abs, 你Google一下看看

懂老哥的意思,不过教材上重点不是这个,是求值的顺序。

scheme里的

((if (> b 0) + -) a b)

是合法的,但是在elisp里,会将 (if (> b 0) + -) 解释为函数,因此报错。

因此想问一下elisp里有没有类似的控制(if (> b 0) + -)先求值的表达方式,所以关键不是在 abs ,谢谢老哥的回复!

思路 + 1

(funcall (if (> b 0) '+ '-) a b)

5 个赞

没看到你的回复,基本就是 funcall 最直接

请问这个习题出自sicp的第几页?

练习 1.4