所以我去了clojure.org/downloads,它说我可以通过leiningen获得clojure.大.我去leiningen.org认为我按照说明操作.它说要获取他们的bash脚本并把它放在你的〜/ bin /中.让它可执行.做到了.那么什么?运行脚本?它没有说,但我做到了.这会创建一个.lein,我认为应该这样做.怎么办?我现在如何安装clojure?这就是clojure.org/downloads所说的:
Modify the dependencies and repositories sections of your Leiningen project.clj file, specifying the version of Clojure that you want:
; under dependencies, select the release of clojure
; (and optionally clojure-contrib) that you want
:dependencies [[org.clojure/clojure
"1.5.0-alpha5"]]
Run Code Online (Sandbox Code Playgroud)
但我不明白这是什么意思,因为我找不到任何"project.clj"文件.〜/ .lein/self-installs有一个怪物leiningen-2.1.3-standalone.jar文件,可能不希望我黑客攻击它.我现在应该怎么做?我怎么能在将来更好地告知自己?
这是我在 ghci REPL 中尝试过的(堆栈 ghci 8.10.7)
\n\xce\xbb> :{\n| import Data.List\n| import Data.Ratio\n| :}\nerror: expecting a single import declaration\nRun Code Online (Sandbox Code Playgroud)\n为什么我一次不能进行多个导入?顺便说一句,可以这样输入完整的模块定义吗,即
\n\xce\xbb> :{\n | module STAL where\n | import Data.List\n | import Data.Ratio\n | import Data.Decimal\n | :}\nRun Code Online (Sandbox Code Playgroud)\n我的动机是我正在使用 Emacs org-mode 的 babel for Haskell,它仅适用于多行代码,当它被包围时:{ :}.
我在 Ubuntu 15.10 上使用 Chrome (47.0.2526.106)。据我所知,“等宽”只是使用“系统”等宽字体的指令(因为不是特定字体)。在 Chrome 设置中,“固定宽度字体”设置为“等宽字体”。然后在我的 Tweek Tool Fonts Monospace 中,我设置了 Courier——但是当一个页面(例如一个简单的错误页面)出现时,我看到的不是 Courier,而是类似于 Ubuntu Mono 的东西,但不完全是这样。Chrome 使用什么字体?它是发送字体,还是在我的系统上使用其他字体?
我真正想要的是能够导出我的项目的 :PROPERTIES: 并以某种方式覆盖默认的隐藏行为。这显然是不可能的。下一个最好的事情是定义一个“抽屉”。所以 :MYDRAWER: 是我可以定义的东西——它会出现在导出中。我的问题是抽屉不允许好的 key:value 属性子类别。有了属性,我可以做到这一点:
:PROPERTIES:
:Author: Victor Andrade
:Author2:
:Title: My Missions for Revolutionary Bolivia, 1944-1962
:Subtitle:
:Published: 1976
:Read: 2010
:Subject: History
:Area: Bolivia
:Comments:
:END:
Run Code Online (Sandbox Code Playgroud)
但我不能用抽屉做到这一点。尝试在 :MYDRAWER: 和 :END: 之间添加 key:value 类别只会被视为文本。有什么办法可以让我导出像布局这样的漂亮属性吗?再说一次,我也不确定如何处理 org-mode 自定义选项(...group Org Export\Org Export General\Org Export With Drawers。我猜所有抽屉都被导出,除非你设置这个不对吧?
将 Emacs/geiser 与 Racket(不是 DrRacket)一起使用,我如何设置断点,然后单步执行代码,在断点处停止?例如,我有这样的代码:
(define (powerset4 lst)
(if (null? lst)
'(())
(append-map (lambda (x)
(begin
(fprintf (current-output-port) "~s ~s ~s\n" x lst x)
(list x (cons (car lst) x))))
(powerset4 (cdr lst)))))
Run Code Online (Sandbox Code Playgroud)
我想在begin序列中停下来看看发生了什么以及值是什么。最好不要依赖你们的printf技巧,即也跟踪某些参数。同样,我使用 Emacs 并使用 Geiser。事实上,如果我能用 Guile 或 Chicken(Geiser 语言)做得更好的话,我会改用它们。
据我所知 - 如果错误我会在这里纠正 - 良好的Scheme实践是做任何需要循环的事情,重复递归,而且溢出不会成为问题,因为尾部递归是内置的.Lisp的,但是,没有保护免受溢出,因此,所有的循环迭代宏(loop,while,等).因此在现实世界的Lisp中,你通常不使用递归,而Scheme只需要它.
如果我的假设是正确的,有没有办法用Lisp"纯粹"而不是冒险溢出?或者这对游戏来说太过游泳以在Lisp中使用递归?我从The Little Schemer回忆起他们如何通过递归给你一个彻底的锻炼.还有一个名为The Little Lisper的早期版本.它是否在Lisp中为您提供相同的递归训练?然后Land of Lisp让我对循环或递归是否是"最佳实践"感到困惑.
我要做的是决定是否在Emacs组织模式中使用Racket,或者只为初学者使用内置的Elisp.我希望学生保持尽可能纯粹的功能,例如,我不想解释递归的新的和困难的话题,然后说"哦,但我们不会使用它......"
在沮丧地徘徊之后,我决定再次在 Emacs 组织模式下尝试 Haskell。我正在使用 Haskell stack-ghci(8.6.3)、Emacs 26.2、org-mode 9.2.3 和intero. 这个代码块
#+begin_src haskell :results raw :session *haskell*
pyth2 :: Int -> [(Int, Int, Int)]
pyth2 n =
[ (x, y, z)
| x <- [1 .. n]
, y <- [x .. n]
, z <- [y .. n]
, x ^ 2 + y ^ 2 == z ^ 2
]
#+end_src
Run Code Online (Sandbox Code Playgroud)
产生这个结果:
*Main| *Main| *Main| *Main| *Main|
<interactive>:59:16: error: Variable not in scope: n
<interactive>:60:16: error: …Run Code Online (Sandbox Code Playgroud) 这是来自The Little MLer。我有这个
data Chain = Link Int (Int -> Chain)
Run Code Online (Sandbox Code Playgroud)
和这个
ints :: Int -> Chain
ints n = Link (n+1) ints
Run Code Online (Sandbox Code Playgroud)
我对这里到底发生了什么感到很困惑。这似乎是自身的无限递归,ints左侧只是ints无休止地重复整个过程。书上说
[...] 我们可以认为
ints是一个很长的ints. 通过将 的第二个组件应用于第一个,我们从这个序列中的一个元素到下一个元素ints n。
我不确定它是如何做到的。但是这会产生一个错误
> ints 0
* No instance for (Show Chain) arising from a use of `print'
: * In a stmt of an interactive GHCi command: print it
Run Code Online (Sandbox Code Playgroud)
尝试加入deriving Show不会成功
data Chain = Link Int (Int …Run Code Online (Sandbox Code Playgroud) 这是我在Hyperspec上看到的一个例子:
(setq fstr (make-array '(0) :element-type 'base-char
:fill-pointer 0 :adjustable t))
(with-output-to-string (s fstr)
(format s "here's some output"))
Run Code Online (Sandbox Code Playgroud)
因此,然后fstr持有here's some output问:你怎么可以做一个简单的清除/重置fstr你想重新开始,把东西在它新的情况,即没有串联多到了吗?或者我只需要重做fstr正在设置的顶级表达式?
我懂了
(dotimes (temp-one 10 temp-one))
Run Code Online (Sandbox Code Playgroud)
来自Hyperspec的例子dotimes.运行它会产生答案10.因此,temp-one在第三个参数位置作为返回的"结果",但是当它dotimes从0开始时它是如何变为10 并且只变为9?
>(dotimes (temp-one 10 temp-one) (format t "~3d " temp-one))
0 1 2 3 4 5 6 7 8 9
10
Run Code Online (Sandbox Code Playgroud)
关于第三个参数,我在这里缺少什么?