Scheme可以在没有Racket的情况下做GUI吗?还是必须使用 Common Lisp?

Posted

技术标签:

【中文标题】Scheme可以在没有Racket的情况下做GUI吗?还是必须使用 Common Lisp?【英文标题】:Can Scheme do GUI without Racket? Or have to use Common Lisp? 【发布时间】:2015-10-18 12:06:34 【问题描述】:

我非常喜欢 Lisp,尤其是 Scheme。我想学习如何使用 Scheme 进行 GUI 开发。我听说过 Racket,但它似乎是与 Scheme 不同的语言,例如set-cdr!。如果我使用它,我将来可能不得不在它们之间切换,这可能会令人困惑。所以我更喜欢使用 R5RS/R6RS 来做 GUI .... 还有其他选择吗,还是我必须使用 Racket 或 Common Lisp?

目前我正在使用 archlinux 和 Petite Scheme。

【问题讨论】:

你也可以使用HOP或Bigloo。 你的意思可能是Petite Chez Scheme 【参考方案1】:

Racket 是一种扩展方案,但您也可以通过指定来选择使用标准方案

#lang r5rs ; or r6rs

在源文件的头部。 DrRacket(Racket 的 IDE)是一个非常不错的 IDE,但你不必使用它来使用 Racket。

至于您的主要问题,方案没有标准的 GUI 开发库。有多种选择——其中之一是 Racket 的库,它可以与 Scheme 一起使用(参见 the manual)。

使用 Chez Scheme,有 SWL(Scheme Widget Library) - 如果您使用 Petite scheme,应该为您安装它。见the reference docs。

编辑 Linux 下,Petite Chez Scheme 的安装程序不包含 SWL,你必须download it directly。

【讨论】:

标准方案是否与 Racket 的 GUI 语法有语法冲突? 不,如果你不使用 Racket 的可选括号和大括号来代替圆括号。【参考方案2】:

您可以尝试在一些现有的 C GUI 库中找到(或者自己开发,但这是一项重要的任务)外来函数的包装器。对于Petite Chez Scheme,请阅读其Foreign Interface 章节。

许多其他 Scheme 实现都有一些与现有 GUI 库的粘合代码。

【讨论】:

ChezScheme 现在位于以下位置:github.com/cisco/ChezScheme 和 cisco.github.io/ChezScheme

以上是关于Scheme可以在没有Racket的情况下做GUI吗?还是必须使用 Common Lisp?的主要内容,如果未能解决你的问题,请参考以下文章

Racket 与 Scheme 宏

在 Scheme / Racket 中 let 的 lambda 定义是啥? [复制]

为啥 miniKanren 中的“disj”在 Scheme 中有效,而在 Racket 中无效?

Scheme/Racket中letrec的含义

Scheme中的邮政编码验证(Dr. Racket)

Racket Lang - Scheme如何组合环境的变量和值列表