1 个不稳定版本

0.0.1 2023年4月14日

#10 in #wall

MIT 许可证

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 版本状态。

作者

版权和许可

版权所有 © 2023 Ingy döt Net

这是免费软件,许可协议如下

MIT (X11) 许可证

无运行时依赖