require 'lime/engine'
engine = Lime::Engine.new
engine.macro(:fortune) do |body, saying|
puts "#{body}: #{saying}"
end
engine[:picasso] = { name: 'Picasso', saying: '(......wtf???)' }
engine.eval '(fortune picasso::name picasso::saying)'
Picasso: (......wtf???)
duangsuse::Echo
#project Lime 今天下午又有一些变更,总的来说: 1. OOP 支持, Ruby 由于足够灵活方便所以(Ruby 版本)没有内建,而是包 std/oop 使用插件(当然也有 Lime)实现的 具体工作方法可以等 wiki 例子: (10.times (do (th) (puts "Hello, world! #:#{th}"))) (-> File std::File) (-> a_file (File::open 'a.txt :r)) (puts (a_file.read)) F…
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
require 'lime/engine' engine = Lime::Engine.new engine.macro(:fortune) do |body, saying| puts "#{body}: #{saying}" end engine[:picasso] = { name: 'Picasso', saying: '(......wtf???)' } engine.eval '(fortune picasso::name picasso::saying)' Picasso: (......wtf???)
#android Via 好像也是开源了文本允许翻译
Forwarded from Deleted Account
纯纯写作开源了字符串资源文件:
https://github.com/drakeet/resources/blob/master/translations/en/strings.xml
并求在行的日语、俄语、西班牙语、荷兰语、印地语等翻译,有偿(大概 50 元)或加入翻译贡献者都可以(这样的话也都会赠送免费激活码或兑换码
https://github.com/drakeet/resources/blob/master/translations/en/strings.xml
并求在行的日语、俄语、西班牙语、荷兰语、印地语等翻译,有偿(大概 50 元)或加入翻译贡献者都可以(这样的话也都会赠送免费激活码或兑换码
duangsuse::Echo
熬两个多小时写这些感觉赛艇(
今天标准函数修订了几个并且添加了异常系统
(好像忘了几个变更... 不过应该也够了,算
(好像忘了几个变更... 不过应该也够了,算
递归展开定义针对列表并断言列表首项是 .或可以被转化成 Macro 形式
递归展开过程只做以下几件事:
空列表被展开为 nil
首项为 :. 的列表交给内部展开器处理
如果首项是列表,直接处理余下的部分,然后尝试展开首项列表,如果展开结果不是 Macro 则尝试调用结果的
如果是符号,对其前置 '^' 处理然后进行解引用,如果得到的不是 Macro, 尝试转型,如果失败就抛出异常
使用rest对Macro进行展开,然后递归对展开结果求值
接下来处理余下部分
如果首项是符号,对其进行解引用,如果得到的不是 Macro, 尝试转型,如果失败就抛出异常
如果是其他对象,尝试
接下来使用已经展开的rest对Macro进行展开,然后递归对展开结果求值
递归展开过程只做以下几件事:
空列表被展开为 nil
首项为 :. 的列表交给内部展开器处理
如果首项是列表,直接处理余下的部分,然后尝试展开首项列表,如果展开结果不是 Macro 则尝试调用结果的
-># 方法(Lime OO 系统里一切皆对象),如果没找到或依然获得非Macro对象即抛出异常如果是符号,对其前置 '^' 处理然后进行解引用,如果得到的不是 Macro, 尝试转型,如果失败就抛出异常
使用rest对Macro进行展开,然后递归对展开结果求值
接下来处理余下部分
如果首项是符号,对其进行解引用,如果得到的不是 Macro, 尝试转型,如果失败就抛出异常
如果是其他对象,尝试
->#, 如果失败就抛出异常接下来使用已经展开的rest对Macro进行展开,然后递归对展开结果求值
duangsuse::Echo
递归展开定义针对列表并断言列表首项是 .或可以被转化成 Macro 形式 递归展开过程只做以下几件事: 空列表被展开为 nil 首项为 :. 的列表交给内部展开器处理 如果首项是列表,直接处理余下的部分,然后尝试展开首项列表,如果展开结果不是 Macro 则尝试调用结果的 -># 方法(Lime OO 系统里一切皆对象),如果没找到或依然获得非Macro对象即抛出异常 如果是符号,对其前置 '^' 处理然后进行解引用,如果得到的不是 Macro, 尝试转型,如果失败就抛出异常 使用rest对Macro进行展开,然后递归对展开结果求值…
(require foo) (require 'foo')会在以下几个位置寻找
foo 库:$LIME_LIBPATH/libfoo.lime$LIME_LIBPATH/foo/lib.lime$__/lib/foo.lime(require ./foo) 会在加载请求脚本的同级别目录下拼接 foo./foo.lime(require ./foo.lime)./foo.lime(ext< foo)$__/extensions/foo.rb (在 Ruby 里)$__/extensions/foo.class (Java)如果不存在,
$__/foo.rb
duangsuse::Echo
其实 Lime 内建 OO 遵循一个非常简单的原则: Lime 解释器展开 S-表达式时会对 Symbol 原子解引用 一般情况下,直接在环境Hash中寻找那个被引用的对象,如果找不到就转给 reference_missing 让它解决(默认总是抛出 ReferenceNotFoundError 异常) OO 却不这样,对找不到的引用执行以下操作: unless ref.include? '.' or ref.include? '::' call_reference_missing else unless…
Lime 中判断一个(Ruby、Java)对象是否是Lime对象的方法是:
1. 询问它的类是不是 Hash
2. hash.has_key? '_class'
1. 询问它的类是不是 Hash
2. hash.has_key? '_class'
Forwarded from iVanilla 自然科学 & 神秘学实验研究部 (iVanilla)
我使用的恢复方法是:https://daily.zhihu.com/story/7813372
(这软件的 Linux 版本的注册码或者破解版找不到,我考虑在 PE 下用 Windows 版来恢复数据)
(这软件的 Linux 版本的注册码或者破解版找不到,我考虑在 PE 下用 Windows 版来恢复数据)
Lime github.com/duangsuse/Lime vs. Lice github.com/lice-lang/lice
; lime standard library is loaded automatically
; print a string
(print "Hello " "World" "\n")
; in lime
(print 'Hello 'World '\n)
(puts "Hello world")
; travel through a range
(for-each i (.. 1 10) (print i "\n"))
; in lime
('(.. 1 10).each' (do (i)
(puts i)))
; define a call-by-name function
(defexpr fold ls init op
(for-each index-var ls
(-> init (op init index-var))))
; in lime
(def fold (ls init op)
(ls.each (do (index-var)
([]= LENV init (op init index-var)))))
; 你可能很好奇 def 里面的 init op 什么的是哪里来的,因为 Lime 没有作用域
; 在填充宏参数的时候他们会被内联到每个非 (# ...) (就是宏内部的宏,那应该在展开时填充) 里的引用中去
; 某次改正了一个东西
; invoke the function defined above
(fold (.. 1 4) 0 +)
; in lime
(fold (" a b c) 0 r)
; passing a call-by-value lambda to a call-by-value lambda
((lambda op (op 3 4)) (lambda a b (+ (* a a) (* b b))))
; to define a call-by-need lambda, use `lazy`.
GitHub
duangsuse/Lime
🍋 Lime is a object-oriented functional macro programming language in Ruby/JVM - duangsuse/Lime