俺是 Lisp 初学者, 先从 Scheme 建立函式语言的感觉,
刚刚开始刷: The Little Schemer - 4th Edition (豆瓣)
环境:
- macOS 10.12.6 Darwin Kernel Version 16.7.0: Mon Nov 13 21:56:25 PST 2017;
- chezscheme: stable 9.5 (bottled)
- 基于: Python 3.6.1 (default, Apr 16 2017, 22:13:58) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.41)]
- 通过: Calysto/calysto_scheme: A Scheme kernel for Jupyter that can use Python libraries
- 在 Jupyter 中运行 /探索 /自学 Scheme
; 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 进行检验 ) ) ) ) ) - member1? 是一个基础的自定函式, 来判定指定原子是否存在目标列表中
- 俺想将迭代过程打印出来,
- 结果发现 cond 多条件判定语句中,
- 无论 null? eq? 或是迭代的 member1?
- 本质上都是退出行为, 根本无法同时打印出对比过程来;
所以, 不得不用过程语言的方法, 通过全局列表收集过程中的数据,
再另外打印:
比如:
(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) 可能还得另外构建合理的可视化输出函式,
所以, 俺的问题是, 这种场景中, 是否可以在计算过程中, 安全输出中间数据, 而又不干挠正常的迭代展开?
