我有一个程序,包装,在clojure。
程序有一些用于启动的符号作为输入。
我创建了一个简单的用户界面,可以使用地图将用户输入的字符串转换为符号。
#expect user to enter "boat"
(def input (read-line))
(def ops '{"boat" b})
(if
# check if the value of the key is a valid symbol
(in? '(a b c) (ops input))
#if so , run class
(start (ops input))
#end
(print "didnt find " input " in options , fail.\n")
)
逻辑有效,但程序一旦到达“开始”调用就会崩溃......这让我觉得,由于某种原因,'(abc)中的符号“b”与b不匹配正在调用的程序中声明(即我未在此处显示的程序)。
很明显这个问题是无趣的,所以我真正的问题是:我应该将字符串解析为符号,我将其作为控制结构发送到另一个程序吗?或者是否有更好的方法来调用使用原始符号作为内部输入的外部clj脚本。我很感激有关程序崩溃的具体细节......但由于我没有提供太多代码,我不希望任何人能够在任何详细意义上神奇地“知道”这里有什么问题。
答案 0 :(得分:4)
你的程序如何崩溃?
符号属于命名空间,如果不考虑这些,则最终可以比较具有相同名称的不同符号。在您的情况下,您可能更喜欢使用关键字(以冒号开头,如“:keyword”)。
您在此处显示的程序不是有效的clojure。你使用sharp(#)作为评论字符的开头,但事实并非如此。你应该使用分号。
其他一些小问题:
更新:通常,clojure中的符号不属于名称空间(请参阅注释)。
答案 1 :(得分:-2)
您可能希望在该列表中包含字符串
'("a" "b" "c")
除非a,b,c符号与别处的字符串绑定?