duangsues.is_a? SaltedFish
60 subscribers
609 photos
6 videos
91 files
562 links
🌶🐔🐟 duangsuse 的日常
尤其喜欢发些奇奇怪怪的东西
和转载别人的东西
Download Telegram
准备使用 Kotlin/JVM 编写
(-> boys ([str Rikka ice100 pandecheng Yutta))
(-> say-hello (# (name)
(@ name " 女装哦 🌚")))
(each boys say-hello)
1:1 = (
1:3 = ->
1:8 = boys
1:10 = (
1:14 = [str
1:20 = Rikka
1:27 = ice100
1:38 = pandecheng
1:44 = Yutta
1:45 = )
1:46 = )
2:1 = (
2:3 = ->
2:13 = say-hello
2:15 = (
2:16 = #
2:18 = (
2:22 = name
2:23 = )
3:1 = (
3:2 = @
3:7 = name
3:16 = " 女装哦 🌚"
3:18 = )
3:19 = )
3:20 = )
4:1 = (
4:5 = each
4:10 = boys
4:20 = say-hello
4:21 = )
(
:->
:boys
(
:[str
:Rikka
:ice100
:pandecheng
:Yutta
)
)
(
:->
:say-hello
(
:#
(
:name
)
(
:@
:name
女装哦 🌚
)
)
)
(
:each
:boys
:say-hello
)
Forwarded from duangsuse::Echo
#PL #project 第一门函数式和能用的语言,就是没写标准库还啥都不能用

支持插件,使用模块化设计
Forwarded from duangsuse::Echo
好用 Lime
Forwarded from duangsuse::Echo
合影留念 #PL #project
jshell> import lime.*

jshell> Lime.parse("(sa(. as21 21) 32)")
$2 ==> [[:sa, [:., :as21, 21], 32]]

jshell> SexpressionList p=Lime.parse("(sa(. as21 21) 32)")
p ==> [[:sa, [:., :as21, 21], 32]]

jshell> Lime l = new Lime(p)
l ==> lime.Lime@30b8a058

jshell> l.run()
| java.lang.RuntimeException thrown: Lime internal error: Failed to expand [[:sa, [:., :as21, 21], 32]] in file <unknown>
| at Lime.raise (Lime.kt:158)
| at Lime.run (Lime.kt:132)
| at (#6:1)


jshell> Lime l = new Lime((SexpressionList)p.get(0))
l ==> lime.Lime@3234e239

jshell> l.run()
| java.lang.RuntimeException thrown: Lime internal error: Failed to resolve reference to :sa in file <unknown>

jshell> p.get(0)
$10 ==> [[:., :as21, 21], 32]

于是我们
jshell> l.getHandlers()
$11 ==> {}

... 好麻烦
刚才突然想到要重构些什么,吃完饭居然忘了
duangsues.is_a? SaltedFish
刚才突然想到要重构些什么,吃完饭居然忘了
其实我想的是作用域至少有一个 hook 要加,或者使用另一种子解释器更直接的作用域,BeanShell 就是这种方法,我也这么打算
另外就是一个设计我写代码的时候理解错了... ^# 调用起来是 (# ...) ,这是为了让这类宏正常工作的,是对 # 的覆盖,我以为是 (^# ..) ... 算了
import lime.*
SexpressionList sexp = (SexpressionList) Lime.parse("(print 1 2 a (print 233 \"Hello, world\") 23232323 (print2 a))").get(0)
Lime lime = new Lime(sexp)
lime.defineMacro("print", "varargs", ". print varargs")
lime.defineMacro("print2", "varargs", ". print 233")
class Foo {
public static Object print(Object[] args) {
pp(args);
return args;
}
static void pp(Object[] args) {
for (Object i : args)
if (i instanceof Object[]) {
System.out.println('[');
pp((Object[])i);
System.out.println(']');
}
else
System.out.println(i);
}
}
java.lang.reflect.iss.onethod print = Foo.class.getDeclaredMethod("print", Object[].class)
lime.getHandlers().put(new Symbol("print"), print)
lime.set("a", 1)
lime.run()
duangsues.is_a? SaltedFish
import lime.* SexpressionList sexp = (SexpressionList) Lime.parse("(print 1 2 a (print 233 \"Hello, world\") 23232323 (print2 a))").get(0) Lime lime = new Lime(sexp) lime.defineMacro("print", "varargs", ". print varargs") lime.defineMacro("print2", "varargs"…
import lime.*
SexpressionList sexp = (SexpressionList) Lime.parse("(print 1 2 a (print 233 \"Hello, world\") 23232323 (print2 a))").get(0)
Lime lime = new Lime(sexp)
lime.defineMacro("print", "varargs", ". print varargs")
lime.defineMacro("print2", "varargs", ". print 233")
class Foo {
public static Object print(Object[] args) {
pp(args);
return args;
}
static void pp(Object[] args) {
args = (Object[])args[0];
for (Object i : args)
if (i instanceof Object[]) {
System.out.println('[');
pp((Object[])i);
System.out.println(']');
}
else
System.out.println(i);
}
}
java.lang.reflect.iss.onethod print = Foo.class.getDeclaredMethod("print", Object[].class)
lime.getHandlers().put(new Symbol("print"), print)
lime.set("a", 1)
lime.run()
(print 1 2 a (print 233 "Hello, world") 23232323 (print2 a))
[233, Hello, world]
233
[1, 2, 1, [Ljava.lang.Object;@3cb1ffe6, 23232323, [Ljava.lang.Object;@3dfc5fb8]
另外 Lexer 的 debug info 几乎是(已经)白加了,Parser 和 SexpressionList 不支持元数据....
测试已经手工有了那我就不写了
如果要实现 Java 接口的话也可以,Lite 那有一个没测试过的 InvocationHandler
Android proguard 配置