一直没有搞懂,common lisp为什么用把函数和变量放在不同的命名空间?

scheme拿来教学完美无瑕. 老师:“咱们不用讲语法哈,来自己看5分钟…好了接下来我们讲讲XXXXX”.

所以这句有浓浓模仿 RMS 名言感觉的话是谁说的?

John McCarthy,RMS,Guy L. Steele Jr. 有这么说吗? 自己开除然后让别人闭嘴的可能不是屑吧。

(求你别乱写别人名字,整些龙鸣缩写了)

不好意思,不熟 RMS,比有些人对 Scheme 的不熟悉程度还高

有,你要不要查查

抄袭需要熟悉原作者🐎?

好像需要哦😊

那你其实是熟悉 RMS 的,我懂了,就和我说开除 Scheme 是一个意思。

真不熟悉,我连 Emacs 都用不熟

对对,我用 Emacs 只会用鼠标点菜单

卧槽,新加坡都在教 Python 了,你们那教学咋还在用 Scheme

哈哈哈哈,我教物理的,当年题库和内部服务器都是scheme写的,用着顺手懒了也不想动了,会教一下新老师怎么用.有些物理竞赛学生也会教一些plot之类的,drracket一步到位方便.别的语言全得专门开个课,就有点扯远了…

为什么?求详解

It’s just trolling

就拿Elisp举例子吧

ELISP> (macroexpand-all '(defun a ()))
(defalias 'a
    #'(lambda nil nil))

够不够indiana style?敢不敢相信?

因为S表达式的确在表达多重函数嵌套调用的时候有缺陷啊,比如

((a b (c ((d f) g) (p (h)))))

你能一眼看出来这个的调用关系么?

假如要写一个返回函数的函数。用indiana-style一眼看出来返回啥么,两个lambda还行,如果多套几个lambda,那就要手动计算下lambda的嵌套层级了。

(define return-a-function
    (lambda (a ...)
      (lambda ()
        ...)))

说明 S exp 太垃圾了,我們还是用 de Bruijn indices 吧。

我寻思用上funcall之后和de Bruin indices长得差不多(一转)

<<h>p><<<g><f>d>c><b>a

可读性更强了 (强行

既然你觉得够,那就够吧。

看不出来吗?

Indiana sytle 本来就倾向于教学用途,但是看出来 lambda 们在干什么不是问题吧(和上个问题类似)(至少我觉得它更合适教学用途,虽然有些人好像在生产环境中也用这种风格)

你觉得能那就能,不狡辩。至少我觉得C系的写法比这个要一目了然

a(b, c(d(f)(g)), p(h()))()