作为一个非暴力者,我应该如何最好地理解vars得名的命名约定*var-name*?
这似乎是一个表示全局变量的lisp约定.但是在clojure中,据我所知,这些变量出现在命名空间中.
我真的很感谢作者在他们的代码中使用这些变量时我应该期待的一个简短的解释,理想的例子是如何以及为什么在clojure库中使用和更改这样的var.
我从来没有真正想过一个符号是否可以成为Lisp中的数字,所以我今天玩弄了它:
> '1
1
> (+ '1 '1)
2
> (+ '1 1)
2
> (define a '1)
> (+ a 1)
2
Run Code Online (Sandbox Code Playgroud)
上面的代码是scheme,但它在Common Lisp和Clojure中看起来大致相同. 是否有1,并引述1之间有什么区别?
我在Emacs中使用Paredit来编辑Lisp代码.如何删除我意外插入的一对额外的parens?没有额外的命令,Paredit不允许这样做.
((square 5)) 成 (square 5)
我抓住了学习函数式编程的bug.所以我的下一个自学项目是通过计算机程序的结构和解释.不幸的是,我从未学过Lisp,因为我不是大学的CS专业.
虽然SICP并不强调编程工具,但是练习需要选择一种类似Lisp的语言.似乎Scheme的一些实现将是阻力最小的路径.另一方面,我听说有人使用过Common Lisp和Clojure.在我看来,Common Lisp或Clojure更有可能在生产代码中使用,因此我的简历稍微好一点.顺便说一下,我完全认为学习语言本身就是值得的,但学习一种帮助我简历的语言仍然是一个好处.我是资本家,也是关于我学习的学者.
如果你不得不自学SICP,你会选择哪种语言?为什么?理想情况下,我想使用可以在JVM上运行的语言.我当然可以使用REPL与bash和emacs一起工作的语言.
附加:有没有人试过不使用Scheme阅读SICP?如果是这样,你的经历是什么样的?
我有兴趣用Java构建Texas Hold'Em AI引擎.这是一个长期项目,我计划投资至少两年.我还在上大学,还没有建立任何雄心勃勃的东西,并希望解决一个长期存在我兴趣的问题.我是人工智能领域的新手.从我在大学的数据结构课程中,我知道基本的构建模块,如BFS和DFS,回溯,DP,树,图等.我正在学习正则表达式,为SCJP和SCJD学习,我将很快采取(密集) )统计课程.
问题:
- 我从哪里开始?我应该选哪些书?玩扑克游戏程序的人工智能是什么样的?我可以从哪个开源项目中获取页面?Java中有哪些优秀的AI资源?我也有兴趣学习Lisp,Jatha好吗?
是否有Lisp的本机代码编译器?它甚至可以编译到哪个程度,具有动态特性,垃圾收集,宏以及其他什么?
我是一个终身面向对象的程序员.我的工作主要是java开发,但我有多种语言的经验.Ruby给了我第一次真正的函数式编程.我喜欢Ruby从功能范例中借用的功能,例如闭包和延续.最终,我毕业于斯卡拉.这是逐步学习以功能性方式处理非平凡问题的好方法.
现在我对Clojure很感兴趣.我知道所有诱人的性感功能(软件事务内存,宏等),但我不能习惯"在lisp中思考".我见过Rich Hickey针对java程序员的截屏视频,但它们主要用于解释语言功能而不是解决现实问题.
我正在寻找任何建议或资源,使其他人更容易过渡.
检查项目是否在列表中的简单方法是什么?
就像是
(in item list)
Run Code Online (Sandbox Code Playgroud)
可能返回true如果item=1和list=(5 9 1 2)和false,如果item=7
我正在研究编程语言设计,我感兴趣的是如何用多方法泛型函数范例替换流行的单调度消息传递OO范例.在大多数情况下,它似乎非常简单,但我最近陷入困境,并希望得到一些帮助.
在我看来,消息传递OO是一种解决两个不同问题的解决方案.我在下面的伪代码中详细解释了我的意思.
===在文件animal.code ===
- Animals can "bark"
- Dogs "bark" by printing "woof" to the screen.
- Cats "bark" by printing "meow" to the screen.
Run Code Online (Sandbox Code Playgroud)
===在文件myprogram.code ===
import animal.code
for each animal a in list-of-animals :
a.bark()
Run Code Online (Sandbox Code Playgroud)
在这个问题中,"树皮"是一种具有多个"分支"的方法,它们根据参数类型的不同而不同.我们对我们感兴趣的每种参数类型(狗和猫)实施一次"树皮".在运行时,我们能够遍历动物列表并动态选择要采用的分支.
===在文件animal.code ===
- Animals can "bark"
Run Code Online (Sandbox Code Playgroud)
===在文件tree.code ===
- Trees have "bark"
Run Code Online (Sandbox Code Playgroud)
===在文件myprogram.code ===
import animal.code
import tree.code
a = new-dog()
a.bark() //Make the dog bark
…
t = new-tree()
b = t.bark() //Retrieve the bark from …Run Code Online (Sandbox Code Playgroud) 我不明白Lisp是如何编译和动态的.对于能够操作,修改和生成代码的语言,是否需要进行解释?语言是否可以完全编译并且仍然是动态的?或者我错过了什么?Lisp做的是什么允许它既编译又动态?