我正在Clojure写一个文本游戏.我希望玩家在控制台上输入线条,并让游戏逐行响应.
研究表明,这(read-line)是一种在Clojure中从标准输入中获取文本行的方式,但它对我不起作用.
我在一个新的Leiningen项目中,我已经添加了一个指向唯一源文件的:main子句project.clj:
(ns textgame.core)
(defn -main [& args]
(println "Entering -main")
; (flush) ;makes no difference if flush are commented out
(let [input (read-line)]
(println "ECHO:" input))
; (flush)
(println "Exiting -main"))
Run Code Online (Sandbox Code Playgroud)
使用lein run产量:
Entering -main
ECHO: nil
Exiting -main
Run Code Online (Sandbox Code Playgroud)
换句话说,没有机会在控制台输入文本(read-line)进行阅读.
我应该如何让Clojure等待输入字符和换行符并返回相应的字符串?
(我在Linux Mint 11上使用GNOME Terminal 2.32.1,在Java 1.6.0_26 Java HotSpot(TM)64位服务器VM上使用Leiningen 1.6.1.1,Clojure 1.2.1版.)
更新:如果我跑lein repl,我可以(println (read-line)),但不是当我有一个-main功能并运行使用lein run.
在 Julia 语言中,我想在字符串上使用为 Array{T,1} aka Vector{T} 定义的函数,本质上将其视为 Array{Char,1}。
我想使用的函数示例:
julia> deleteat!("Hrello!",2)
ERROR: MethodError: no method matching deleteat!(::String, ::Int64)
Closest candidates are:
deleteat!(::Array{T,1} where T, ::Integer) at array.jl:1177
deleteat!(::Array{T,1} where T, ::Any) at array.jl:1214
deleteat!(::BitArray{1}, ::Integer) at bitarray.jl:901
...
Stacktrace:
[1] top-level scope at none:0
julia> deleteat!(['H','r','e','l','l','o','!'], 2)
6-element Array{Char,1}:
'H'
'e'
'l'
'l'
'o'
'!'
Run Code Online (Sandbox Code Playgroud)
明确地说,我想以字符串开头并以字符串结尾,但使用数组 {Char,1} 操作来更改字符串。
我最近安装了J并在jconsole中玩。这是我的会议结束时的样子:
quit
|value error: quit
exit
2!:55
Run Code Online (Sandbox Code Playgroud)
我在网上搜索并很快发现正确的退出代码是
exit''
Run Code Online (Sandbox Code Playgroud)
既然无意义的词给出了值错误,并且“exit”的子串都不是有效的J,为什么要为“exit”给出一个值呢?2!:55 是什么意思?
使用J语言,我希望获得数组元素计数的映射.
具体来说,我想输入一个带有两到多个字母的小写英文单词,然后取回单词中的每对字母以及出现的次数.
我需要一个动词来提供这样的东西,无论你认为合适的J结构如何:
对于'可可':
co 2
oc 1
oa 1
Run Code Online (Sandbox Code Playgroud)
对于'香蕉':
ba 1
an 2
na 2
Run Code Online (Sandbox Code Playgroud)
对于'牛奶':
mi 1
il 1
lk 1
Run Code Online (Sandbox Code Playgroud)
对于'到':
to 1
Run Code Online (Sandbox Code Playgroud)
(对于像'a'这样的单字母单词,任务未定义且不会尝试.)
(顺序并不重要,这就是我碰巧列出它们的方式.)
我可以轻松地将单词中的连续字母对作为矩阵或框列表:
2(] ;._3)'cocoa'
co
oc
co
oa
]
2(< ;._3)'cocoa'
?????????????
?co?oc?co?oa?
?????????????
Run Code Online (Sandbox Code Playgroud)
但是我需要帮助从那里到对数映射.
我知道〜.和〜:但我不只想返回重复的唯一元素或索引.我想要计数的映射.
NuVoc的"Loopless"页面表明/(或/ \.或/ \)是我应该寻找累积问题的地方.我熟悉/对数值数组的算术运算,但是对于你/我我不知道你需要积累什么样的字母组合才能组成y.
(注意:我已经可以在没有帮助的情况下使用Java或Python等"常规"语言执行此操作.关于SO的类似问题适用于与J.语法和语义截然不同的语言.我对这种问题的惯用J方法很感兴趣. )
我即将使用python和libtcod roguelike游戏库制作游戏.
更重要的是,我正在使用PyMock,因为我刚开始学习测试驱动开发,我决心不作弊.我真的想养成正确的习惯,根据TDD,我需要在编写第一行代码之前进行失败的单元测试.
我认为我对"生产"代码的第一次测试应该是导入它的依赖项libcotdpy.
我的测试文件:
#!/usr/bin/python
import pymock # for mocking and unit testing
import game # my (empty) production code file, game.py
class InitializeTest(pymock.PyMockTestCase):
def test_libtcod_is_imported(self):
# How do I test that my production file imports the libtcodpy module?
if __name__=="__main__":
import unittest
unittest.main()
Run Code Online (Sandbox Code Playgroud)
请:
1)(python people)如何测试模块是否已加载?
2)(TDD人)我应该对这个基本的单元测试吗?如果没有,我应该测试的第一件事是什么?
我是REBOL的新手.关于REBOL用于发送电子邮件的例子的博客,例如"发送"文档中的这个示例:
send luke@rebol.com "Testing REBOL Function Summary"
Run Code Online (Sandbox Code Playgroud)
看过这么简单方便,我兴奋地尝试通过我的GMail帐户向自己发送测试邮件.
我查看了SMTP/POP的官方GMail帮助以获取相关的SMTP/POP服务器名称:https: //support.google.com/mail/answer/7104828?hl = en
以下是"发送"和"设置网络"文档在多大程度上让我:
>> set-net [ myrealusername@gmail.com smtp.gmail.com pop.gmail.com ]
>> send myrealusername@gmail.com "Hello me!"
connecting to: smtp.gmail.com
** Access Error: Cannot connect to smtp.gmail.com
** Where: open-proto
** Near: smtp-port: open [scheme: 'esmtp]
either only
Run Code Online (Sandbox Code Playgroud)
经过反思,当然没有用; 我告诉REBOL没有想要使用SSL/TLS,相关端口号或我的GMail密码.它必须需要以上所有才能实际发送电子邮件.
那我该怎么做?
在努力混合和匹配不同的阶段之后,我试图理解 J 中的构图。我需要帮助在同一个句子中的一元短语和二元短语之间切换。
我刚刚用J做了一个简单的骰子滚轮,作为例子:
d=.1+[:?[#]
4 d 6
2 3 1 1
8 d 12
10 2 11 11 5 11 1 10
Run Code Online (Sandbox Code Playgroud)
这是一条链:“d 是 1 加上 x 出现的 y 的(上限)卷”
但是,如果我想使用 >: 来递增(并跳过上限 [: ),以便它在第一个分叉后“切换”为单子解释,该怎么办?其内容为:“d 是 y 出现 x 的增量”。
像这样的东西是行不通的,尽管在我看来它具有正确的结构:
d=.>:&?[#]
d
>:&? ([ # ])
Run Code Online (Sandbox Code Playgroud)
(如果这种方法不适合 J,并且我应该坚持使用有盖的叉子,这也是有用的信息。)
从J中的表达式中提取名词作为参数的系统方法是什么?要清楚,包含两个文字的表达式应该成为一个二元表达式,使用左右参数而不是文字.
我正在尝试学习默认风格,所以如果可以避免,我不想使用命名变量.
一个具体的例子是我制作的简单模具辊模拟器:
>:?10#6 NB. Roll ten six sided dice.
2 2 6 5 3 6 4 5 4 3
>:?10#6
2 1 2 4 3 1 3 1 5 4
Run Code Online (Sandbox Code Playgroud)
我想系统地将参数10和6提取到表达式的外部,以便它可以滚动任意数量的任何大小的骰子:
d =. <new expression here>
10 d 6 NB. Roll ten six sided dice.
1 6 4 6 6 1 5 2 3 4
3 d 100 NB. Roll three one hundred sided dice.
7 27 74
Run Code Online (Sandbox Code Playgroud)
随意使用我的示例来说明,但我希望能够遵循任意表达式的过程.
编辑:我刚刚发现使用x和y的引用版本可以使用eg自动转换为默认形式13 : '>:?x#y'.如果有人可以告诉我如何找到13 :我可能能够回答我自己的问题的定义.
如果我想在每对字母上做一些事情,它可能在朱莉娅看起来像这样:
for l1 in 'a':'z'
for l2 in 'a':'z'
w = l1*l2
# ... do something with w ...
end
end
Run Code Online (Sandbox Code Playgroud)
我希望将此概括为任意长度的单词,给定一个n指定所需字母数的值.我如何在朱莉娅中做到最好?
j ×4
julia ×2
refactoring ×2
clojure ×1
gmail ×1
leiningen ×1
python ×1
rebol ×1
rebol2 ×1
tdd ×1
unit-testing ×1
user-input ×1