标签: lisp

带VIM的编程方案(Racket) - 如何入门

最近,我开始在DrRacket中编写Racket(以前称为Scheme).我很快就开始错过DrRacket中VIM的所有功能,所以我想使用VIM进行我的方案(球拍)编程.

我知道Emacs可能是强烈的lisp编程的最佳选择,但我想要的只是编写一个scheme(racket)文件检查语法,然后运行它.

不幸的是,我无法弄清楚,如何在文件的命令行中调用"racket"以使其与DrRacket一样.

我正在运行Ubuntu 10.10 Maverick Meerkat,VIM 7.3,我从官方网站下载并安装了Racket.

帮助开始将非常感激.

lisp vim scheme racket

27
推荐指数
2
解决办法
1万
查看次数

计划延续假人

对于我的生活,我无法理解延续.我认为这个问题源于我不明白它们的用途.我在书籍或网上找到的所有例子都非常简单.他们让我想知道,为什么有人甚至想要延续?

这是一个典型的不切实际的例子,来自TSPL,我认为这是一本非常公认的关于这个主题的书.在英语中,他们将继续描述为计算结果的"做什么".好的,这是可以理解的.

然后,第二个例子给出:

(call/cc
  (lambda (k)
    (* 5 (k 4)))) => 4 
Run Code Online (Sandbox Code Playgroud)

这有什么用?k甚至没有定义!当(k 4)无法计算时,如何评估此代码?更何况,如何call/cc知道撕掉4最内层表达式的参数并返回它?会发生什么事(* 5 ..?如果这个最外层的表达式被丢弃,为什么要写呢?

然后,陈述的"较少"的简单示例是如何使用call/cc来提供递归的非本地退出.这听起来像流控制指令,即break/return在命令式语言中,而不是计算.

通过这些动议的目的是什么?如果有人需要计算结果,为什么不只是存储它并在以后根据需要调用.

lisp scheme continuations

27
推荐指数
3
解决办法
5412
查看次数

lisp中的变量引用

另一个新手(Common)LISP问题:

基本上在大多数编程语言中,函数接受变量的引用而不仅仅是值,即通过引用传递而不是传递值.让我们说,为了简单起见,我想编写一个LISP函数来接收变量并将变量的值增加一:

(defun increase-by-one (var)
  (setf var (+ var 1)))
Run Code Online (Sandbox Code Playgroud)

现在显然问题是这个函数只增加了堆栈上变量副本的值,而不是实际的原始变量.我也试图通过使用宏来取得成效,虽然我有这种感觉,使用宏是正确的方法.

我在LISP中一直打到这堵墙,我确信必须有办法解决这个问题,或者在LISP中我有没有想过这个问题的方法完全不同?这样的事情是如何在LISP中完成的?

编辑:多人建议使用incf.我只用这个例子以简单的方式演示问题,我实际上并没有寻找重新实现incf.但无论如何,谢谢你的建议.

lisp common-lisp

26
推荐指数
3
解决办法
1万
查看次数

没有Java的Android

在完成整个"企业"编程一段时间之后,我对语言本身感到非常失望,如果我不得不回到它,我总是感到非常受阻.你的普通Android应用程序的项目大小并不太吓人,而且库的编码风格实际上相当不错,但如果我能避免使用Java,我肯定会这么做.

这就是问题:我可以避免吗?虽然桌面和服务器上有很多JVM语言可供选择,但Dalvik VM和设备本身也有一些限制.在JIT中2.2这似乎有点好一点,但限制自己到最前沿将是一个相当苛刻的决定.

我所知道的唯一替代方案似乎是Scala.我有可能失踪吗?Clojure似乎完全符合我在Dalvik上面所说明的问题,但由于AppInventor是基于Kawa构建的,因此移动平台上的Lisp可能有希望吗?

还有哪些其他语言可以使用或朝这个方向迈进?

lisp java android scala clojure

26
推荐指数
3
解决办法
1万
查看次数

鉴于以下LISP评估功能 - 添加defmacro需要什么?

给定LISP eval函数的以下定义 - 添加defmacro函数需要什么?(甚至只是评估一个宏)

(defun null. (x)
      (eq x '()))

(defun and. (x y)
  (cond (x (cond (y 't) ('t '())))
        ('t '())))

(defun not. (x)
  (cond (x '())
        ('t 't)))

(defun append. (x y)
  (cond ((null. x) y)
        ('t (cons (car x) (append. (cdr x) y)))))

(defun list. (x y)
  (cons x (cons y '())))

(defun pair. (x y)
  (cond ((and. (null. x) (null. y)) '())
        ((and. (not. (atom x)) (not. (atom y)))
         (cons (list. (car …
Run Code Online (Sandbox Code Playgroud)

lisp macros eval common-lisp

26
推荐指数
1
解决办法
7262
查看次数

用Lisp以外的语言编写Emacs扩展

我想要一个现有的应用程序(用OCaml编写)并为它创建一个Emacs"接口"(例如,Emacs GDB模式).我更愿意这样做而不需要编写大量的Lisp代码.在MVC术语中,我希望View是Emacs,但是模型和控制器仍然(主要)保留OCaml.

有人知道用Lisp以外的语言编写Emacs扩展的方法吗?这可以采用以某种其他语言绑定到Emacs扩展API的形式(例如,使OCaml成为一流的Emacs扩展语言)或Emacs交互模式,例如,扩展具有可以写入的管道Emacs Lisp表达式并读出结果值.

lisp emacs ocaml

25
推荐指数
2
解决办法
4791
查看次数

为什么大多数S表达式语言都是动态输入的?

为什么大多数Lisps和Schemes都是动态输入的?静态类型是否与其某些常见功能混合在一起?

lisp scheme programming-languages s-expression

25
推荐指数
3
解决办法
1455
查看次数

如何在Common Lisp REPL中查看docstrings和其他符号信息?

我是CL的新手,我想学习如何阅读文档字符串并从REPL获取其他帮助信息.像help(symbol)Python中,或symbol?在IPython中,或:t:i在Haskell的GHCI.

所以,给定一个符号名称,我希望能够知道:

  • 它有什么样的价值,如果有的话(一个函数,一个变量,一个都没有)
  • 如果它是一个函数或一个宏,那么它的位置参数是什么
  • 如果它有文档字符串,请显示它
  • 它来自哪个包或文件或何时定义

我找到了(documentation '_symbol_ '_type_),但这不是我需要的.我需要知道的价值符号,势必(类型'function,'variable,'compiler-macro,等)之前,我可以使用documentation.然后它只返回docstring,它可能缺少或不足以使用该符号.

例如,在Lisp中,帮助mapcar不是很有用(CLisp的REPL):

> (documentation 'mapcar 'function)
NIL
Run Code Online (Sandbox Code Playgroud)

我希望能够看到这样的东西:

>>> map?
Type:       builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form:    <built-in function map>
Namespace:  Python builtin
Docstring:
    map(function, sequence[, sequence, ...]) -> list

    Return a list of the results of applying the function to the items of
    the argument sequence(s).  If more than one …
Run Code Online (Sandbox Code Playgroud)

lisp documentation common-lisp read-eval-print-loop

25
推荐指数
2
解决办法
8946
查看次数

Common Lisp并行编程

我想在Common Lisp中并行实现我的粒子滤波算法.粒子过滤和采样可以并行化,我想为我的4核机器做这个.我的问题是并行编程是否在CL中是可行的,如果可行,是否有任何良好的读数,关于在CL中开始并行计算的教程.

lisp parallel-processing concurrency common-lisp

25
推荐指数
2
解决办法
1万
查看次数

通过改变像Dylan,Julia和Seph这样的主要括号,Clojure会失去什么?

三种lispy homoiconic语言,Dylan,JuliaSeph都离开了前导括号 - 所以在Common Lisp中的假设函数调用看起来像:

(print hello world)
Run Code Online (Sandbox Code Playgroud)

看起来像下面的假设函数调用

print(hello world)
Run Code Online (Sandbox Code Playgroud)

用上面提到的三种语言.

如果Clojure沿着这条道路走下去 - 为了实现这一目标会有什么牺牲?

推理:除了Clojure中令人惊讶的懒惰功能数据结构,以及地图和seqs的改进语法,对并发的语言支持,JVM平台,工具和令人敬畏的社区 - 它是'LISP'的独特之处在于给出同音性的前导括号,它给出了提供语法抽象的宏.

但如果你不需要括号 - 为什么要这些呢?我能想到保留它们的唯一论点是

(1)重用emacs中的工具支持

(2)促使人们"在LISP中思考"而不是试图将其视为另一种程序性语言)

lisp language-design clojure dylan julia

25
推荐指数
5
解决办法
2992
查看次数