我的教授告诉我们,我们可以为下一个编程任务选择一种编程语言.我一直想尝试一种功能语言,所以我想我会尝试使用clojure.问题是我理解了语法并理解了基本概念,但是我遇到了一些问题,让我在脑海中"点击".有人有建议吗?或者我可能选错了语言来开始函数式编程?
Peter Norvig 在第50页的"人工智能编程范式"中提到了特异性和一致性之间的权衡以及选择使用setq或setf将变量更新为值时的权衡.您有什么推荐的吗?您是否遇到过重要性超出可读性的情况?
我在"On Lisp"一书中读到,应该避免cons在扩展宏的主体中过度使用.为什么被cons认为是效率低下的操作?Lisp不与cons细胞共享结构吗?
是否存在Clojure的CLOS(Common Lisp Object System)之类的东西?
翻译的出乎意料的外表倾向于冻结语言的形式,并且一些决定对于"递归函数......"而言相当轻松,后来证明是不幸的.这些包括用于条件表达式的COND表示法,其导致不必要的括号深度,并且使用数字零来表示空列表NIL和真值false.除了鼓励色情编程外,对地址0进行特殊解释也给后来的所有实施带来了困难.
他在说什么?
在Common Lisp中的值是否只是用于将多个值打包到一个被调用者解构的列表中的语法糖?我问,因为我认为Common Lisp支持"true"多值返回,而不是像其他语言一样返回元组或列表,例如python.有人告诉我,这只是语法糖,所以我希望有人能够解释它.为了尝试理解values函数返回的类型,我输入了(type-of (values 1 2 3)),输出是BIT.我在Common Lisp参考中搜索了这个,我在数据类型部分找不到它.此外,任何人都可以共享一些资源,建议如何在Common Lisp中实现值函数?谢谢.
我在达尔文上使用OpenMCL,我想做的事情如下:
(loop for f in (directory "somedir")
collect (some-per-file-processing f))
Run Code Online (Sandbox Code Playgroud)
但我无法directory返回除了以外的任何东西NIL,我似乎无法在网上找到任何好的解释(除了"每个系统的不同").
有什么指针吗?
为什么有人会更喜欢Scheme宏而不是Common Lisp宏(我真的也想知道,我不是想成为一个巨魔)?
我作为Lisp newb的经验是,Common Lisp风格的宏比Scheme的宏更容易学习.我还没有看到Scheme的宏有任何优点,但当然这并不意味着它们不存在.
我知道Scheme宏是"hygenic",但我仍然不相信这是值得的额外复杂性.在另一方面,虽然,有很明显的人是相信,这是必要的,否则就不会有Common Lisp中的宏方案的实现.
长话短说,有人可以向我捍卫Scheme的宏吗?
假设我想使用OO编程语言实现事件总线.我可以这样做(伪代码):
class EventBus
listeners = []
public register(listener):
listeners.add(listener)
public unregister(listener):
listeners.remove(listener)
public fireEvent(event):
for (listener in listeners):
listener.on(event)
Run Code Online (Sandbox Code Playgroud)
这实际上是观察者模式,但用于应用程序的事件驱动控制流.
您将如何使用函数式编程语言(例如lisp风格之一)实现此模式?
我问这个是因为如果一个人不使用对象,人们仍然需要某种状态来维护所有听众的集合.此外,由于听众集合随着时间的推移而变化,因此无法创建纯粹的功能解决方案,对吧?
lisp ×10
common-lisp ×7
clojure ×3
scheme ×2
clos ×1
directory ×1
filesystems ×1
history ×1
macros ×1
oop ×1
terminology ×1