[101]如何在迭代展开过程中输出中间数据?

2018-01-05 23:51:52 +08:00
 ZoomQuiet

俺是 Lisp 初学者, 先从 Scheme 建立函式语言的感觉,

刚刚开始刷: 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)

可能还得另外构建合理的可视化输出函式,

所以, 俺的问题是, 这种场景中, 是否可以在计算过程中, 安全输出中间数据, 而又不干挠正常的迭代展开?

4644 次点击
所在节点    Lisp
1 条回复
ZoomQuiet
2018-03-15 16:11:39 +08:00
~> [\[101\]如何在迭代展开过程中输出中间数据? \- Google 网上论坛]( https://groups.google.com/forum/#!topic/lisp-cn/Ny4nBE0igWw)

在 lisp-cn 列表中问出来了:

尝试用命令行跑一下

; member? _v1 尝试将探索过程打印出来

(define member1? ; 声明函式
(lambda (a lat) ; 绑定匿名函式, 接收参数 a lat
(format #t "~a->~a~%" a 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)) ; 对其它成员使用 member1 (<--当然的要对应变化否则..) 进行检验
)
)
)
)
)
(define b 'egg)
(define lat `(fried eggs and scrambled egg))
(member1? b lat)



> ༄ chez member1.scm

Chez Scheme Version 9.4
Copyright 1984-2016 Cisco Systems, Inc.

egg->(fried eggs and scrambled egg)
egg->(eggs and scrambled egg)
egg->(and scrambled egg)
egg->(scrambled egg)
egg->(egg)



主要原因是, Calysto/calysto_scheme: A Scheme kernel for Jupyter that can use
Python libraries https://github.com/Calysto/calysto_scheme

这一 Jupyter 插件, 是用 Py 实现的一个 Scheme 模拟器,
本身不是完备的 Scheme 解析器,
缺少很多必要的函式支持,

所以, 切换到 CLI 环境中, 使用确实的 Scheme 运行环境运行,
就能获得预期结果了...



囧 rz...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/420492

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX