由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 出一个Clojure题
相关主题
高手们,求教2, c99里面怎么把字符串转换成变量名STL感觉实在太变态了
问一个比较[菜鸟问题]类模板问题
C++11里list迭代器判空仍然知道具体的list对象吗?c++ iterator 弱问
C++中使用back_inserter为啥可以不用#include 和using std::back_inserter;??c++ template question:
python question请问Linux底下有没有最简易的show 2D x-y curve的工具
不懂JS,看到一段很惊讶的代码,求解释用那个design pattern好?
一个C++的概念问题关于inserter
intel icc hash_map 求救!binary_search只要求forward_iterator?
相关话题的讨论汇总
话题: def话题: eval话题: wrap话题: dwrap话题: string
进入Programming版参与讨论
1 (共1页)
T*******x
发帖数: 8565
1
找出一段Clojure代码,命名为x,使得迭代"eval"之后,每一步的代码长度比前一步更
长。
举个结果不正确的例子。比如"(inc 1)"。
(def x '(inc 1))
(take 10 (iterate eval x))
结果是
((inc 1) 2 2 2 2 2 2 2 2 2)
越来越短,不符合要求。
再举一个,比如"1"。
(def x 1)
(take 10 (iterate eval x))
结果是
(1 1 1 1 1 1 1 1 1 1)
每一步一样长,也不符合要求。
T*******x
发帖数: 8565
2
这个题我稍微改一下,我觉得应该是等价的:
找出一个字符串x,使得迭代“read-string然后eval”之后,每一步得到的字符串长度
比前一步更长。
也就是:
(def x "????")
(def eval-string (comp eval read-string))
(take 10 (iterate eval-string x))
read-string把一段字符串变成一段Clojure代码,eval再执行这段代码,结果还得是一
段字符串,而且是一段代码的字符串。

【在 T*******x 的大作中提到】
: 找出一段Clojure代码,命名为x,使得迭代"eval"之后,每一步的代码长度比前一步更
: 长。
: 举个结果不正确的例子。比如"(inc 1)"。
: (def x '(inc 1))
: (take 10 (iterate eval x))
: 结果是
: ((inc 1) 2 2 2 2 2 2 2 2 2)
: 越来越短,不符合要求。
: 再举一个,比如"1"。
: (def x 1)

g****t
发帖数: 31659
3
就是要知道自己被调用了多少次吧?clojure是不是所谓的
Lexical scope什么的。
真要看这些东西。找个本科生的lambda calculus 课程
做一下题似乎更有效。


: 这个题我稍微改一下,我觉得应该是等价的:

: 找出一个字符串x,使得迭代“read-string然后eval”之后,
每一步得到的字符
串长度

: 比前一步更长。

: 也就是:

: (def x "????")

: (def eval-string (comp eval read-string))

: (take 10 (iterate eval-string x))

: read-string把一段字符串变成一段Clojure代码,eval再执行这段代码,
结果还
得是一

: 段字符串,而且是一段代码的字符串。



【在 T*******x 的大作中提到】
: 这个题我稍微改一下,我觉得应该是等价的:
: 找出一个字符串x,使得迭代“read-string然后eval”之后,每一步得到的字符串长度
: 比前一步更长。
: 也就是:
: (def x "????")
: (def eval-string (comp eval read-string))
: (take 10 (iterate eval-string x))
: read-string把一段字符串变成一段Clojure代码,eval再执行这段代码,结果还得是一
: 段字符串,而且是一段代码的字符串。

T*******x
发帖数: 8565
4
谢谢。lambda calculus我肯定要看的。一直没找到机会。:)
你说的这个思路听起来有道理,知道了自己被调用了多少次,然后怎么办呢?写一下伪
代码吧。或者你给预估一下此题的难度,是几行代码的事还是说它肯定短不了?
我觉得此题挺深奥。因为不管你给出的答案是什么样,我都可以稍微修改一下问题,使
原答案的方法不适用。似乎。

【在 g****t 的大作中提到】
: 就是要知道自己被调用了多少次吧?clojure是不是所谓的
: Lexical scope什么的。
: 真要看这些东西。找个本科生的lambda calculus 课程
: 做一下题似乎更有效。
:
:
: 这个题我稍微改一下,我觉得应该是等价的:
:
: 找出一个字符串x,使得迭代“read-string然后eval”之后,
: 每一步得到的字符
: 串长度
:
: 比前一步更长。

T*******x
发帖数: 8565
5
看了wiki,不错。看到很多熟悉的东西。Y-Combinator也里面。:)

【在 g****t 的大作中提到】
: 就是要知道自己被调用了多少次吧?clojure是不是所谓的
: Lexical scope什么的。
: 真要看这些东西。找个本科生的lambda calculus 课程
: 做一下题似乎更有效。
:
:
: 这个题我稍微改一下,我觉得应该是等价的:
:
: 找出一个字符串x,使得迭代“read-string然后eval”之后,
: 每一步得到的字符
: 串长度
:
: 比前一步更长。

T*******x
发帖数: 8565
6
我起个头,定义了一个xx,它还不是想要的结果。
(def space " ")
(def lparen "(")
(def rparen ")")
(defn wrap [wrapped] (str lparen "wrap" space wrapped rparen))
(def eval-string (comp eval read-string))
(def xx "xx")
(def result (take 8 (iterate (comp eval-string wrap) xx)))
(for [one result] (println one))
结果打印如下:
xx
(wrap xx)
(wrap (wrap xx))
(wrap (wrap (wrap xx)))
(wrap (wrap (wrap (wrap xx))))
(wrap (wrap (wrap (wrap (wrap xx)))))
(wrap (wrap (wrap (wrap (wrap (wrap xx))))))
(wrap (wrap (wrap (wrap (wrap (wrap (wrap xx)))))))
每次迭代长度都增加,但是迭代的操作包含一个wrap函数。现在目标是要把这个wrap函
数push到静态代码中。

【在 T*******x 的大作中提到】
: 这个题我稍微改一下,我觉得应该是等价的:
: 找出一个字符串x,使得迭代“read-string然后eval”之后,每一步得到的字符串长度
: 比前一步更长。
: 也就是:
: (def x "????")
: (def eval-string (comp eval read-string))
: (take 10 (iterate eval-string x))
: read-string把一段字符串变成一段Clojure代码,eval再执行这段代码,结果还得是一
: 段字符串,而且是一段代码的字符串。

T*******x
发帖数: 8565
7
哦。定义一个double wrap就可以了。
(def wrap-with (partial format "(%s %s)"))
(def dwrap- (partial wrap-with "dwrap"))
(def dwrap (comp dwrap- dwrap-))
(def eval-string (comp eval read-string))
(def xx "xx")
(def x "(dwrap xx)")
(def result (take 4 (iterate eval-string x)))
(for [item result] (println item))
结果是这样:
(dwrap xx)
(dwrap (dwrap xx))
(dwrap (dwrap (dwrap (dwrap xx))))
(dwrap (dwrap (dwrap (dwrap (dwrap (dwrap (dwrap (dwrap xx))))))))

【在 T*******x 的大作中提到】
: 我起个头,定义了一个xx,它还不是想要的结果。
: (def space " ")
: (def lparen "(")
: (def rparen ")")
: (defn wrap [wrapped] (str lparen "wrap" space wrapped rparen))
: (def eval-string (comp eval read-string))
: (def xx "xx")
: (def result (take 8 (iterate (comp eval-string wrap) xx)))
: (for [one result] (println one))
: 结果打印如下:

T*******x
发帖数: 8565
8
这个增长太快了,缺乏控制。
这个问题实际上要定义一套新的操作和符号,大概相当于Clojure的子集。下面这个增
长速度为线性。
;;define symbols
(def o "o")
(defn e [x] (format "(e %s)" x))
(defn t [x] (format "(t (e %s))" x))
(def eval-string (comp eval read-string))
(def x "(t o)")
(def result (take 10 (iterate eval-string x)))
(doseq [item result] (println item))
结果如下:
(t o)
(t (e o))
(t (e (e o)))
(t (e (e (e o))))
(t (e (e (e (e o)))))
(t (e (e (e (e (e o))))))
(t (e (e (e (e (e (e o)))))))
(t (e (e (e (e (e (e (e o))))))))
(t (e (e (e (e (e (e (e (e o)))))))))
(t (e (e (e (e (e (e (e (e (e o))))))))))

【在 T*******x 的大作中提到】
: 哦。定义一个double wrap就可以了。
: (def wrap-with (partial format "(%s %s)"))
: (def dwrap- (partial wrap-with "dwrap"))
: (def dwrap (comp dwrap- dwrap-))
: (def eval-string (comp eval read-string))
: (def xx "xx")
: (def x "(dwrap xx)")
: (def result (take 4 (iterate eval-string x)))
: (for [item result] (println item))
: 结果是这样:

T*******x
发帖数: 8565
9
这个挺好玩,还有很多变种。
;;define symbols
(def p "p")
(def q "q")
(defn e [x y] (format "(e %s %s)" x y))
(defn t [x y] (format "(t (e %s %s) q)" x y))
(def eval-string (comp eval read-string))
(def x "(t p q)")
(def result (take 5 (iterate eval-string x)))
(doseq [item result] (println item))
;;;;
(t p q)
(t (e p q) q)
(t (e (e p q) q) q)
(t (e (e (e p q) q) q) q)
(t (e (e (e (e p q) q) q) q) q)

【在 T*******x 的大作中提到】
: 这个增长太快了,缺乏控制。
: 这个问题实际上要定义一套新的操作和符号,大概相当于Clojure的子集。下面这个增
: 长速度为线性。
: ;;define symbols
: (def o "o")
: (defn e [x] (format "(e %s)" x))
: (defn t [x] (format "(t (e %s))" x))
: (def eval-string (comp eval read-string))
: (def x "(t o)")
: (def result (take 10 (iterate eval-string x)))

1 (共1页)
进入Programming版参与讨论
相关主题
deque的pointer和reference是怎么回事?python question
a question about std::stack不懂JS,看到一段很惊讶的代码,求解释
呼唤大侠们,我实在不能实现C++泛型的精神。一个C++的概念问题
stl 的 member type 看起来挺头大的intel icc hash_map 求救!
高手们,求教2, c99里面怎么把字符串转换成变量名STL感觉实在太变态了
问一个比较[菜鸟问题]类模板问题
C++11里list迭代器判空仍然知道具体的list对象吗?c++ iterator 弱问
C++中使用back_inserter为啥可以不用#include 和using std::back_inserter;??c++ template question:
相关话题的讨论汇总
话题: def话题: eval话题: wrap话题: dwrap话题: string