11

我有 C# 和 JavaScript 方面的经验,过去几年一直在使用 Node.js。基本上,我对这种环境非常有信心,但一种语言总是引起我的注意:LISP。鉴于 LISP 的最小语言概念,我发现它的表现力令人印象深刻且非常迷人。它基本上和 jQuery 一样:事半功倍;-)

不幸的是,我对 LISP 的体验或多或少是理论上的,有些只是在玩玩,而不是认真的编程。

现在我想改变这一点,但我绝对致力于 Web 应用程序开发(因此是 Node.js)。我的问题不是将 LISP 作为一种语言来学习,我的问题是我不知道从哪里以及如何开始使用不是基于控制台而是基于 Web 的“Hello LISP world”应用程序。

所以,我的问题基本上是:如何在 LISP 中编写类似于以下 Node.js 应用程序的服务器端 Web 应用程序

var http = require('http');
http.createServer(function (req, res) {
  res.end('Hello world!');
}).listen(3000);

不需要大量的框架和额外的库和东西等等?

有经验的 LISP 程序员将如何解决这个任务?有什么提示吗?

4

3 回答 3

21

一旦你安装了SBCLQuicklisp

(ql:quickload "hunchentoot")
(hunchentoot:start 
  (make-instance 'hunchentoot:easy-acceptor :port 3000))
(hunchentoot:define-easy-handler (foo :uri "/bar") (name)
  (format nil "Hello~@[ ~A~]!" name))

然后访问

http://127.0.0.1:3000/bar?name=World
于 2013-08-11T16:26:33.540 回答
9

关于 Hunchentoot 的答案确实是一种适合初学者的方法,我完全建议尝试一下。

与问题中的 node.js 变体的唯一主要区别是 Hunchentoot 是一个同步 Web 服务器。如果您想获得相同的异步行为(实际上,您为什么要这样做,但这是另一个讨论;),您必须尝试其他方法,例如wookie。类似的 Hello World 示例在其文档页面中进行了介绍。

于 2013-08-11T19:39:25.367 回答
8

为了补充其他答案,还有 ningle 1和 Caveman 2,它们也有很好的记录。Ningle 路由与 Sinatra/Flask 非常相似。

于 2013-08-12T08:46:57.337 回答