1 个不稳定版本
0.0.1 | 2023年4月14日 |
---|
#10 in #wall
6KB
Lingy
一种现代的Acme主义Lisp方言
摘要
运行Lingy REPL
$ lingy
Welcome to Lingy [perl]
user> (prn "Hello, world!")
"Hello, world!"
nil
user>
或Lingy单行命令
$ lingy -e '(println "Hello, world!")'
Hello, world!
或运行Lingy程序文件
$ echo '(println "Hello, world!")' > hello.ly
$ lingy hello.ly
Hello, world!
或运行示例Lingy程序
$ curl -sL https://raw.githubusercontent.com/ingydotnet/lingy/main/eg/99-bottles.ly | lingy - 3
3 bottles of beer on the wall
3 bottles of beer
Take one down, pass it around
2 bottles of beer on the wall.
2 bottles of beer on the wall
2 bottles of beer
Take one down, pass it around
1 bottles of beer on the wall.
1 bottles of beer on the wall
1 bottles of beer
Take one down, pass it around
0 bottles of beer on the wall.
描述
Lingy是一种用多种语言编写的Lisp方言,包括:Perl。
Clojure是一种编译到JVM上运行的Lisp方言。
ClojureScript使用相同的Clojure源代码,但编译到NodeJS。
Lingy是支持YAMLScript语言的运行时。
YAMLScript旨在用与Lingy相同的语言实现。
Lingy深受Clojure(Lisp)语言的影响。它希望与Clojure有很高的互操作性。目前它只支持Clojure的一小部分,但支持Lisp的基本功能,如函数应用和宏。
Lingy最初是Make a Lisp项目的Perl实现。这提供了一个基本的Clojure风格的Lisp解释器。
lingy
CLI用法
Lingy语言安装了一个名为lingy
的命令。您可以使用此命令运行Lingy程序,启动Lingy REPL或运行Lingy单行表达式。
-
lingy --repl
(或仅lingy
)启动Lingy交互式REPL。REPL具有以下readline支持:
- 命令历史记录
- CTL-R搜索
- 括号匹配突出显示
- CTL-C取消命令,而不离开REPL
使用CTL-D退出REPL
-
lingy程序.ly foo bar
运行Lingy程序,传入参数。参数在Lingy中作为
*ARGV*
可用。 -
cat程序.ly|lingy-foo bar
从STDIN运行Lingy程序并传递参数。
-
表示从STDIN而不是文件运行。如果没有参数,则可以省略-
。 -
lingy-e'(println"Hello" (nth*ARGV* 0))'world
运行带参数的Lingy单行命令。
当与
--repl
一起使用时,首先运行-e
代码,然后进入REPL。
lingy
CLI选项
-
-<string>
,--eval=<string>
要评估的Lingy字符串。
-
-
,--repl
启动Lingy REPL。可以与
-
一起使用。 -
--ppp
打印一个
-e
表达式的 Lingy 编译后的抽象语法树 (AST)。 -
--xxx
以 YAML 格式转储一个
-e
表达式的 Lingy 编译后的抽象语法树 (AST)。
支持的功能
*
+
-
/
<
<=
=
==
>
>=
apply
*ARGV*
assoc
atom
atom?
catch
concat
cond
conj
cons
contains?
count
dec
def
defmacro
deref
dissoc
do
empty?
eval
false
false?
*file*
first
fn
fn?
get
getenv
hash-map
*host-language*
if
join
keys
keyword
keyword?
let
list
list?
load-file
macro?
macroexpand
map
map?
meta
nil
nil?
not
nth
number
number?
println
prn
pr-str
quasiquote
quasiquoteexpand
quote
range
readline
read-string
reset!
rest
seq
sequential?
slurp
str
string?
swap!
symbol
symbol?
throw
time-ms
true
true?
try
vals
vec
vector
vector?
with-meta
PPP
WWW
XXX
YYY
ZZZ
路线图
接下来要添加的主要功能
- 多参数函数/宏定义和应用
- 命名空间
- Lambdas
- lingy.core 库
- 正则表达式支持
另请参阅
状态
Lingy 目前处于 Alpha 版本状态。
作者
- Ingy döt Net [email protected]
版权和许可
版权所有 © 2023 Ingy döt Net
这是免费软件,许可协议如下
MIT (X11) 许可证