正如标题所说,LISP的吸引力是什么?
我已经看到它抬高到高天然后,然后在一个基座上面翻过来.我已经看到这里的人,我认识的实际程序员,大学教授试图看起来像那些明显超越了平民语言战争的开明人员而宁愿死去而不是犯下异端邪说一种语言比另一种语言更好.
我试着去学习它,我看了几个教程,在lisp和clojure的"在x分钟内学习x"页面(因为据我所知,它是在jvm上运行的更多FP投入的lisp),我理解语法以及如何在其中执行操作.在过去的几个月里,我又多次回到教程中,但是每次语法都让我想找一个高中生的孩子,并因为混乱的代码而对他大喊大叫,因为看起来像是一个C风格的if条件变得疯狂所有嵌套的括号和简单的东西似乎成了一件苦差事.lisp似乎在几行中做了什么,其他FP语言如Haskell或F#,甚至像C#这样的非FP语言只是发现地图和过滤器似乎更少以更具表现力的方式进行.
我看错了吗?是否有需要发生的点击?我是否只找到了糟糕的资源?(如果是的话请给我一些很好的资源来学习lisp/clojure,最好是一些练习)
什么在......是lisp的吸引力?在这里诚实地向上帝提问.
先感谢您!
给定一个整数列表,找到给定数字的3个最接近的值.
=> (def mylist '(3 6 7 8 9 12 14))
=> (get_closest mylist 10)
(8 9 12)
Run Code Online (Sandbox Code Playgroud) 有人可以将其转换为 Clojure,我不知道该做setMainWindow(argument)这样的事情....
import com.vaadin.Application;
class something {
public void init() {
Window main = new Window("The Main Window");
setMainWindow(main);
addComponent(new WindowOpener("Window Opener", main));
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
package app;
import com.vaadin.Application;
import com.vaadin.ui.Button;
import com.vaadin.ui.Window;
/**
* The Application's "main" class
*/
@SuppressWarnings("serial")
public class MyVaadinApplication extends Application{
private Window window;
@Override
public void init(){
window = new Window("My Vaadin Application");
setMainWindow(window);
window.addComponent(new Button("Click Me"));
}
}
Run Code Online (Sandbox Code Playgroud)
有一个“/lib/vaadin.jar”,其中包含所有“com.vaadin.*”的东西。
我认为setMainWindow(window);是来自扩展类。我不会写那个方法。
我正在尝试使用该longs功能,但它不起作用:
(println (longs 1 2 3))
Run Code Online (Sandbox Code Playgroud)
任何例子?
网站上的描述不是很好,这就是为什么我遇到问题 http://clojure.org/cheatsheet
谢谢
逆转是不正常的
user=> (reverse (list 5 7 9 0))
(0 9 7 5)
Run Code Online (Sandbox Code Playgroud)
不应该回来
(9 7 5 0)
Run Code Online (Sandbox Code Playgroud)
然而,反向工作正常排序
user=> (reverse (sort (list 5 7 9 0)))
(9 7 5 0)
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释第一种情况的行为.
我启动 repl 并cjl收到提示
Clojure 1.11.1
user=>
Run Code Online (Sandbox Code Playgroud)
在用户提示下,我输入(+ 1 2 3)并按回车键。输出是这样的:
user=> (+ 1 2 (+ 1 2 3)
6
Run Code Online (Sandbox Code Playgroud)
我认为我输入的操作被覆盖了。
我在 i3 窗口管理器中,但是当我退出回到操作系统控制台时,它会执行相同的操作。我该如何解决这个问题。
如果重要的话,我使用 FreeBSD。
我在 grid.clj 文件中有一个矩阵的表示:
(-> (grid 10 10)
(toggle 2 3 4 5)
(off 2 3 4 5)
(on 2 3 4 5))
Run Code Online (Sandbox Code Playgroud)
这是一个函数列表,第一个初始化一个网格,其他的修改它。
Clojures 的“代码即数据”应该可以让我通过在集合末尾添加一条指令来轻松修改该表示。列表是有序集合对吗?订单很重要。那么如何将指令添加到列表的末尾?
像这样的东西:
(def grid (read-string (slurp "grid.clj")))
(conj grid '(off 1 2 3 6))
Run Code Online (Sandbox Code Playgroud)
但是我不能添加到列表的末尾,这是一个可作为代码评估的数据结构。如果我不能添加到用于代码(作为数据)的有序集合的末尾,它如何“编码为数据”?
我还是Clojure的新人; 我正在尝试拆分从txt文件解析的值,
我需要将这些单词作为sembol添加到列表中.例如
示例txt文件:
这是一个简单的测试
结果应该如下:
'((t h i s) (i s) (a) (s i m p l e) (t e s t)
Run Code Online (Sandbox Code Playgroud)
请提前帮助,谢谢.