
像 s 表达式特性,disp 中的宏是怎样实现的,文档就没解释清楚
求一下比较推荐的资料
]]>人们不愿意相信,一个 Lisp 的语法,是缩进。人们更愿意相信,它是括号。人们特别愿意相信,它的每一行应该..都带着括号。 (from internet.)
虽然想着分享出来看看大家想法, 不过毕竟是争议性话题, 如果有比较重的想法还是尽量阐释一下背后的逻辑吧....确实我比较关心真实的使用场景会遇到什么样的不同情况. 我个人的经验和理解, 缩进跟括号的问题跟工具的关联性很大, 比如说我用的 Sublime Text 没装插件, 所以认为括号处理起来叫麻烦, 所以可能对应是用的什么工具也值得说明一下.
视频和图片当中的程序,
当然我相信, 在最终业务或者个人需求要用到编程语言的时候, 大多数人考虑的还是语言的生态, 语言的抽象能力, 语言的工具链, 而不是单纯语法如何如何. 所以很少会去选择 Lisp, 更不会单单为了缩进就去选中一个语言.
仅仅单纯从上手使用的复杂度跟使用场景来说, 前缀表达式配合缩进语法怎么样? 还有 Python 好像因为某些原因国内用的人多起来了, 不知道后边反馈怎么样? 这边有没有学校里学 Python 入门的同学?

补充一个关于上下文的视频描述 https://www.bilibili.com/video/BV15v411H7JB/ .
]]>鸭子编辑器 https://github.com/evilbinary/duck-editor
基于 scheme 开发的,GPU 渲染,高可扩展。
支持可扩展
(import (extensions extension)) (register 'theme.dracula (lambda (duck) (let ((editor (get-var duck 'editor)) ;;扩展功能代码块 )) 刚刚开始刷: The Little Schemer - 4th Edition (豆瓣)
环境:
; member? _v1 尝试将探索过程打印出来 (define iter4cond ()) ; 声明寄存容器 (define member1? ; 声明函式 (lambda (a lat) ; 绑定匿名函式, 接收参数 a lat (set! iter4cond (cons iter4cond lat)) ; ??? (cond ; 系列 if 判定 ((null? lat) #f) ; 法则->先检验 目标原子是否为空? 是, 直接退出并返回 #f (else (or ; 否则 or 一下两种对比 ;(define lat1st (car lat)) ;(display lat1st) (eq? (car lat) a) ; 第一个成员是否和 对比原子相同? ;(eq? lat1st a) ; 第一个成员是否和 对比原子相同? (member1? a (cdr lat)) ; 对其它成员使用 member 进行检验 ) ) ) ) ) 所以, 不得不用过程语言的方法, 通过全局列表收集过程中的数据,
再另外打印:
比如:
(define lat `(fried eggs and scrambled egg)) (define b 'and) (member1? b lat) => #t 再
iter4cond 才能输出:
(((() fried eggs and scrambled egg) eggs and scrambled egg) and scrambled egg) 可能还得另外构建合理的可视化输出函式,
所以, 俺的问题是, 这种场景中, 是否可以在计算过程中, 安全输出中间数据, 而又不干挠正常的迭代展开?
]]>Tier $1 or more:
Tier $8 or more:
Tier $15 or more:
Tier $18 or more:
比较推荐 1 刀包和 8 刀包,reddit 上的 讨论
]]>scheme-lib 是一个 scheme 使用的库。目前支持 android mac linux windows,其它平台在规划中。
apt-get install freeglut3-dev libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libalut-dev libopenal-dev libffi-dev依赖库。make命令就可以编译,对应平台的文件在bin目录下。bin目录,执行source env.sh,然后运行./scheme --script ../apps/hello.ss就可以运行例子。



cd scheme-lib/android/src/packages,在 shell 下执行python sync.py命令,这样每次修改后,会自动同步 packages 下的代码到手机/sdcard/org.evilbinary.chez/lib目录下面,这样方便运行了。(import (test) (gles1) (glut) ) (load "/sdcard/org.evilbinary.chez/lib/apps/hello.ss") ;imgui 例子 ;imgui hello,world (define (imgui-test-hello-world) (glut-init) (imgui-init) (imgui-scale 2.5 2.5) (glut-touch-event (lambda (type x y) (imgui-touch-event type x y) )) (glut-key-event (lambda (event) (imgui-key-event (glut-event-get event 'type) (glut-event-get event 'keycode) (glut-event-get event 'char) (glut-event-get event 'chars)) (if (= 4 (glut-event-get event 'keycode )) (begin (imgui-exit) (glut-exit))) )) (glut-display (lambda () (imgui-render-start) ;(imgui-test) (imgui-set-next-window-size (imgui-make-vec2 200.0 140.0) 0) (imgui-begin "evilbinary" 0) (imgui-text "hello,world") (imgui-end) (imgui-render-end) )) (glut-reshape (lambda(w h) (imgui-resize w h) )) (glut-main-loop) (imgui-exit)) 运行效果如下:
在手机上输入运行代码可能不方便,所以弄了个配置文件,把需要运行的代码放到配置中会自己加载代码运行。配置文件为config.xml内容如下:
<?xml version='1.0' encoding='utf-8' standalOne='yes' ?> <map> <string name="debugCode">(import (test) (gles1) (glut) ) (load "/sdcard/org.evilbinary.chez/lib/apps/draw-point.ss") ;(imgui-test-hello-world) </string> </map> adb push config.xml /sdcard/org.evilbinary.chez/conf/config.xml
打开 scheme app 就可以直接运行啦。
手工添加 Android.mk 和源码文件到scheme-lib/android/src下命名为 libhadd 的文件夹。 add.c 内容如下:
#include <stdio.h> #include <stdarg.h> int add(int a,int b){ return a+b; } Android.mk 内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) include $(LOCAL_PATH)/../Optimizations.mk LOCAL_MODULE := add LOCAL_SRC_FILES := add.c LOCAL_C_INCLUDES := LOCAL_CFLAGS += -I. -I./c/ LOCAL_CFLAGS += -g -Wall -DANDROID -DINLINES -DGC_MACROS -Wno-unused-parameter -pie -fPIE -fPIC LOCAL_LDLIBS += -ldl -llog -lz include $(BUILD_SHARED_LIBRARY) 执行make android。
将编译后生成的库android/src/libs/libadd.so 同步到/sdcard/org.evilbinary.chez/lib目录下,这样能调用外部库了。
调用外libadd.so库和使用代码如下:
(import (scheme) (utils libutil) ) (load-lib "libadd.so") (define-c-function int add (int int) ) (display (add 100 1234)) 我不了解计算原理,可计算性问题,形式系统,逻辑学什么的这些概念.许多文章说起这些概念,然后一句带过,让我感觉这背后水很深的样子,下面无从下手了.
大家是怎么学过来的?一定要了解这些数学理论,才能回答我的问题吗? 求教站内大牛.
]]>mapcar为什么叫mapcar?直接叫map不好吗?又比如,不自动换行的print为什么叫prin1?取 list 的第一个元素为什么叫car?诸如此类的问题,哪里可以找到相关的资料? ]]>
本期 #AMA# 我们邀请到了来自 Google 的工程师,mu 语言 的创办者,Lisp 社区 的核心贡献者 - Kartik Agaram
Kartik 致力于让代码更易读,让开发更简单!你可以问他任何问题(请使用英语) https://coding.net/u/akkartik/p/AMA
]]>I'm working on ways to better convey the global structure of programs. The goal: use an open-source tool, get an idea for a simple tweak, fork the repo, orient yourself, and make the change you visualized -- all in a single afternoon. I'd like to live in such a world, wouldn't you? http://akkartik.name
https://github.com/keyanzhang/c311-get-started
init.el 中包含的内容如下:racket-mode for all the greatness. racket-run command to meta-enter (option-enter). This is basically equivalent with DrRacket's Run button. If you don't like the keybinding, just modify it in init.el.helm cuz nobody can memorize all the emacs functions.company for auto completion.rainbow-delimiters so we won't need to get LASIK.paredit is included but disabled by default. (setq paredit-enabled nil ) to (setq paredit-enabled t ) in init.el to activate paredit.~/.emacs.d/bkup so you won't see annoying bla~ files in your working folder again.option key becomes meta.Command-a = "Select All"Command-x = "Cut", Command-c = "Copy", and Command-v = "Paste"Command-s = "Save"Command-z = "Undo"recentf-mode: use C-x C-r to access a list of recently edited files.$PATH variable from your shell.现在的状况是可以运行练习2.42(八皇后谜题的那个)的代码,但是参数设成5就会突破Py递归深度上限。除法和浮点数都不能用!
这个项目应该可以完成第四章的使命,等做到4.1.7节分离语法分析与求值过程之后顺便加一下尾递归优化应该可以把上面的问题解决……
]]>