- 主题:Lisp/Scheme没有return语句,你们怎么能忍受的?
call/cc确实是我没学明白的一个内容之一,我再看看吧,实在搞不明白就放弃了。
【 在 milksea 的大作中提到: 】
: scheme 有 call-with-current-continuation,剩下的就是库可以实现的语法糖了。这个长名字在很多 lisp 方言中叫 call/cc。
: 而lisp的一个特点就是宏和自定义语法满天飞,语法糖到处是,方言千奇百怪。
: 去学一下 call/cc,然后你可以定义自己的 return 语句。——其实是发现用另一种思路完成类似的效果。
: ...................
--
FROM 223.215.88.*
AI给了个例子说能模拟return:
> (define (simulate-return)
(call/cc (lambda (return)
(printf "Before return\n")
(return "Returned value")
(printf "After return\n") ; 这行代码不会被执行
))
)
> (simulate-return)
【 在 zhangxp024 的大作中提到: 】
: 玩racket也有好几年了,racket库比较全,从gui到web各种....
: 写着写着,发现racket,sbcl,clojure.... 没有return语句,只能在函数的最后一条一句返回。
: 真的无法忍受。这tm还能写代码吗?在函数中需要的地方,比如if while里返回,这是最常见的逻辑很简单的代码了吧?
: ...................
--
修改:zhangxp024 FROM 223.215.88.*
FROM 223.215.88.*
这是racket模拟return的一段代码:nth函数返回列表的第n项,可以接收空列表'()作为参数,n超过列表项数,返回空列表'()
#lang racket
(require dyoo-while-loop)
(require rackunit)
(define (nth n x)
(call/cc (lambda (return)
(let ([i 1]) (begin
(while (< i n)
(if (equal? x '()) (return '())
(begin (set! x (cdr x))
(set! i (+ i 1))
; (print x)
))
)
(if (equal? x '()) (return '()) (car x))
))
)
)
)
【 在 zhangxp024 的大作中提到: 】
: 玩racket也有好几年了,racket库比较全,从gui到web各种....
: 写着写着,发现racket,sbcl,clojure.... 没有return语句,只能在函数的最后一条一句返回。
: 真的无法忍受。这tm还能写代码吗?在函数中需要的地方,比如if while里返回,这是最常见的逻辑很简单的代码了吧?
: ...................
--
修改:zhangxp024 FROM 223.215.88.*
FROM 223.215.88.*
return 是多餘的。
最後一句的值就是return 的 值, 包括 return 一個function
【 在 zhangxp024 的大作中提到: 】
: 玩racket也有好几年了,racket库比较全,从gui到web各种....
: 写着写着,发现racket,sbcl,clojure.... 没有return语句,只能在函数的最后一条一句返回。
: 真的无法忍受。这tm还能写代码吗?在函数中需要的地方,比如if while里返回,这是最常见的逻辑很简单的代码了吧?
: ...................
--
FROM 219.79.87.*