我为这个看似愚蠢的问题道歉,但我现在已经开始使用ClojureScript几周了,我无法弄清楚这个简单的问题:
我如何调试ClojureScript?
所以这是问题所在:
我的问题:
开发ClojureScript应用程序的正确方法是什么?
PS我看过ClojureScriptOne - 我不喜欢的是它将所有技术同时捆绑在一起; 而且我更愿意在将它们连在一起之前了解如何单独使用每个单独的部分.
我对ring + mustache + compojure很满意,[主要是因为我可以使用我的标准Clojure调试技术]但是ClojureScript是另一个野兽.
更新:自从第一次提出这个问题以来,情况发生了很大的变化.这些天调试ClojureScript应用程序的正确方法是启用源映射 - http://github.com/clojure/clojurescript/wiki/Source-maps
我发现这个很好的片段用于解析Prolog中的lisp(从这里开始):
ws --> [W], { code_type(W, space) }, ws.
ws --> [].
parse(String, Expr) :- phrase(expressions(Expr), String).
expressions([E|Es]) -->
ws, expression(E), ws,
!, % single solution: longest input match
expressions(Es).
expressions([]) --> [].
% A number N is represented as n(N), a symbol S as s(S).
expression(s(A)) --> symbol(Cs), { atom_codes(A, Cs) }.
expression(n(N)) --> number(Cs), { number_codes(N, Cs) }.
expression(List) --> "(", expressions(List), ")".
expression([s(quote),Q]) --> "'", expression(Q).
number([D|Ds]) --> digit(D), number(Ds).
number([D]) --> digit(D).
digit(D) --> …Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法在emacs会话中保存窗口配置.我知道桌面保存非常适合保留缓冲区和诸如此类的东西,并且emacs手册演示了如何将窗口配置存储到寄存器中,但这不会在会话中持续存在.
当然,这似乎并不太难以实现自己......
如何从CouchDB中获取多个文档,特别是使用couchdb-python?
据我所知,一些Prologs支持类似字典的关联数据结构.对于这样做的实现,它们是否支持部分统一的概念与另一个实际上不包含所有键的结构?
例如,在core.logic/miniKanren的语法中:
(run* [q]
(== {:foo 1 :bar 2} (partial-map :foo q)))
Run Code Online (Sandbox Code Playgroud)
这将返回单个结果,其中q绑定为1.
Prologs会给这个操作或这个部分结构起一个名字吗?
我正在研究一个Rails模板,并试图编写一些代码,允许我填充一个表或多列ul标签"从上到下"和"从左到右"跨越我指定的许多列.我刚刚掌握了Ruby,所以我无法理解这一点.我也对这个有用的片段的惯用Haskell版本感到好奇.对Clojure版本的改进表示赞赏:
(defn table [xs & {:keys [cols direction]
:or {cols 1 direction 'right}}]
(into []
(condp = direction
'down (let [c (count xs)
q (int (/ c cols))
n (if (> (mod c q) 0) (inc q) q)]
(apply map vector (partition n n (repeat nil) xs)))
'right (map vec (partition cols cols (repeat nil) xs)))))
Run Code Online (Sandbox Code Playgroud)
有了这段代码,我就可以做到以下几点:
(table (range 10) :cols 3)
Run Code Online (Sandbox Code Playgroud)
打印出来的情况如下:
0 1 2
3 4 5
6 7 8
9
Run Code Online (Sandbox Code Playgroud)
更棘手的一个:
(table (range 10) :cols 3 :direction …Run Code Online (Sandbox Code Playgroud) 我很好奇是否有更简单的方法从网址中删除特定参数.我想出的是以下内容.这看起来有点冗长.使用的图书馆或更加pythonic版本赞赏.
parsed = urlparse(url)
if parsed.query != "":
params = dict([s.split("=") for s in parsed.query.split("&")])
if params.get("page"):
del params["page"]
url = urlunparse((parsed.scheme,
None,
parsed.path,
None,
urlencode(params.items()),
parsed.fragment,))
parsed = urlparse(url)
Run Code Online (Sandbox Code Playgroud) 根据我的理解,在Prolog中,您可以在解析时捕获功能:
foo(feature(X)) --> [X], bar.
Run Code Online (Sandbox Code Playgroud)
在设计DCG时这是常见的吗?
foo(featureA(X), featureB(Y)) --> [X], [Y], bar.
Run Code Online (Sandbox Code Playgroud) fd/distinct在元素将在有限域而不是distincto?的情况下使用的优点是什么?
以下全部返回([0 1] [1 0]).
;;; With distincto
(run* [q]
(fresh [x y]
(fd/in x y (fd/interval 1))
(distincto [x y])
(== q [x y])))
;;; With fd/distinct
(run* [q]
(fresh [x y]
(fd/in x y (fd/interval 1))
(fd/distinct [x y])
(== q [x y])))
;;; Without fd at all.
(let [interval [0 1]]
(run* [q]
(fresh [x y]
(membero x interval)
(membero y interval)
(distincto [x y])
(== q [x y]))))
Run Code Online (Sandbox Code Playgroud)
值得注意的是,虽然看起来你可能会distincto在你可能使用的任何地方使用 …
仍在努力了解宏的最佳实践.我正在尝试编写一个动态定义包的宏.
(defmacro def-dynamic-package (name)
`(defpackage ,(intern (string-upcase name) "KEYWORD")
(:use :common-lisp)))
Run Code Online (Sandbox Code Playgroud)
这适用于以下表达式:
(def-dynamic-package "helloworld")
Run Code Online (Sandbox Code Playgroud)
但对于这样的事情惨遭失败:
(defun make-package-from-path (path)
(def-dynamic-package (pathname-name path)))
Run Code Online (Sandbox Code Playgroud)
要么
(defun make-package-from-path (path)
(let ((filename (pathname-path)))
(def-dynamic-package filename)))
Run Code Online (Sandbox Code Playgroud)
我理解大多数基本宏是如何工作的,但是如何实现这个宏却让我感到惊讶.
我在core.logic中试过这个
(require [clojure.core.logic :as l])
(l/run* [q]
(l/fresh [a b c]
(l/membero a [1])
(l/membero b [4 5])
(l/membero c [1 2])
(l/== q [a b])))
期待结果 [1 4] [1 5]
但它确实如此 [1 4] [1 4] [1 5] [1 5]
然后我开始玩它并发现:
(require [clojure.core.logic :as l])
(l/run* [q]
(l/fresh [a b c]
(l/membero a [1])
(l/membero b [4 5])
(l/membero c [1 1 1 1 1 1 1 1])
(l/== q [a b])))
;; => ([1 4] [1 4] [1 4] …Run Code Online (Sandbox Code Playgroud) 有没有图书馆可以做到这一点?玩Common Lisp似乎是降低新手入门门槛最有用的事情之一.ASDF似乎主要用于部署,而不是用于快速原型设计和开发.在comp.lang.lisp上的线程之后,似乎人们都认为CL的包系统功能强大,但缺乏像Python的死简单模块系统那样容易.从某种意义上讲,它是针对功率而不是可用性而设计的.
很高兴知道我是不是错了.如果我是对的,我很惊讶没有人试图在ASDF之上构建类似Python模块的系统.
一直在敲我的脑袋一段时间,我读了一堆文章,问题并没有更明确.我有一堆字符串存储在我的数据库中,想象如下:
x = '\xd0\xa4'
y = '\x92'
Run Code Online (Sandbox Code Playgroud)
在Python shell中,我得到以下内容:
print x
?
print y
?
Run Code Online (Sandbox Code Playgroud)
这正是我想要看到的.然而,有以下内容:
print unicode(x, 'utf8')
?
Run Code Online (Sandbox Code Playgroud)
但不是这个:
unicode(y, 'utf8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 0: unexpected code byte
Run Code Online (Sandbox Code Playgroud)
我的感觉是我们的字符串被破坏了,因为Django试图将它们转换为unicode,但我只是在猜测这一点.任何见解或变通方法都表示赞赏.
更新:当我查看包含'\ x92'值的行的数据库时,我将此字符视为'.撇号.我正在使用Unicode UTF-8编码查看数据库的内容.