有些人可能熟悉Parenthesis Hell(代码here)。那么,在晚间电话之间浪费一些时间的好方法,对吗?
我成功使用ghc编译这五个文件。如果我运行
,解释器似乎有效$ ./ph
但是由于我并不是很了解Lisp / cdr / car的东西,所以我很快就试图做一个正常运行的程序。我认为至少其中一些应该打印一些标准输出......
$ ./ph () ()
-bash: syntax error near unexpected token `)'
$ ./ph () (3)
$ ./ph () (())
$
$ ./ph (()())
-bash: syntax error near unexpected token `('
$ ./ph "()()" # suggestion in comment
ph: ()(): openFile: does not exist (No such file or directory)
$ ./ph # actual behavior with returns
()
()
ph: Prelude.read: no parse
毋庸置疑,任何在“doc”中使用Hello World的尝试都会导致许多“意外令牌附近的语法错误”消息。有任何想法吗?或者所有内容都评估为nil
,所以这只是一个精心设计的Lisp joke,除了两个实际编译器?谢谢!
(注意:Lisp爱好者将通过教导更多人如何解释这个括号内容来提供服务,我必须承认,无论如何在完全不同的环境中对我有用。)
编辑2:@dfeuer至少有一个有效的分辨率,但我想知道是否可以从shell中以交互方式使用。
$ cat hello
(()()(()()(()()()()((()()(()(()((()((()()()((()((()()()((()((((()()(()()()()()()(((()(((()((()((((()(((()()(()()((()((()()()((()()(()()()()(()()()()(()()()()(()(())))))))))))))))))))))))))))))))))))))))))))))))))
$ ./ph hello
Hello world!
奇怪且又棒极了。
答案 0 :(得分:2)
我认为它不希望代码出现在其论点中。它看起来像是在查找文件名(以及名为-v
的命令行选项)。
似乎每个程序只接受一个带括号的表达式。因此() (())
之类的内容无效,但(() (()))
可以(或者至少格式良好)。如果要从命令行使用它,可以使用echo
,因为它也从stdin读取:
echo "(()()(()()(()()()()((()()(()(()((()((()()()((()((()()()((()((((()()(()()()()()()(((()(((()((()((((()(((()()(()()((()((()()()((()()(()()()()(()()()()(()()()()(()(())))))))))))))))))))))))))))))))))))))))))))))))))" | ./Test