我不理解clojure 1.5发行说明中的这段代码.它使用cond->宏.例如,它将如何转换为1.5之前的代码?
user=> (cond-> 1
true inc
false (* 42)
(= 2 2) (* 3))
6
Run Code Online (Sandbox Code Playgroud) 这是一个菜鸟问题,所以如果我冒犯了某人,我很抱歉.
但是如何在*nix计算机上安装跷跷板?是的,我已经阅读了README.MD文件,但是project.clj如何知道在哪里找到库jar(例如跷跷板)?
基本上...
=> (atom? 5)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: atom? in this context, compiling:(NO_SOURCE_PATH:1)
=> (atom? /a)
RuntimeException Invalid token: /a clojure.lang.Util.runtimeException (Util.java:156)
RuntimeException Unmatched delimiter: ) clojure.lang.Util.runtimeException (Util.java:156)
=> (atom? "hello world")
CompilerException java.lang.RuntimeException: Unable to resolve symbol: atom? in this context, compiling:(NO_SOURCE_PATH:1)
那么有谁知道发生了什么?我正在使用Eclipse Juno 4.2,CounterClockwise插件.
我正在考虑的是时间和效率.考虑到这些,哪种方法(在下面的方法或其他未提及的方法)是最有效的方法来遍历字符串的每个字符?
String str = "Foo Bar";
for(int i=0;i<str.length();i++)
System.out.println(str.charAt(i)); // access the character using .charAt()
for(char letter: str.toCharArray)
System.out.println(letter); // use for-each loop with the char array.
Run Code Online (Sandbox Code Playgroud)
同样,可能有更好的方法来做到这一点,但我也很好奇上面两者之间是否存在重大的时间/资源差异.
在这个问题中,我有三个(结构相同的)列表。两个包含所有数字,另一个则填充nil。我试图通过添加两个列表中的相应值来替换空列表中的相应值。到目前为止我所拥有的利用了一个循环并用于setf替换该值。
(defun add-two-lists (list1 list2 list3)
(loop for a in list1
for b in list2
for c in list3 do
(setf c (+ a b))))
Run Code Online (Sandbox Code Playgroud)
问题是这个函数没有破坏性。如何使这个功能具有破坏性?
好的,我知道我可以使用 anapply来执行此操作,但是出于将来或切线的目的,有没有办法使用循环来执行相同的操作?
我决定采用倒数第二个解决方案;使用列表长度来遍历列表。
(defun add-two-lists (list1 list2 list3)
(loop for x from 0 to (- (list-length list1) 1) do
(setf (nth x list3) (+ (nth x list1) (nth x list2))))
(values list3))
Run Code Online (Sandbox Code Playgroud) 在lisp中,我可以将参数传递给函数并在函数内进行更改.(AKA破坏性功能).但是,在Clojure中,我已经读过某个地方,在同一个函数中改变给定的参数是不允许的.例如:
(defn add-two-lists [list1 list2]
(for [n (range (count list1))]
(+ (nth list1 n) (nth list2 n))))
Run Code Online (Sandbox Code Playgroud)
这是一个普通函数,它的输出是两个相同列表的相加.但是,我想要这样的东西:
(defn add-two-lists [list1 list2 added_list]
(set! added_list
(for [n (range (count list1))]
(+ (nth list1 n) (nth list2 n)))))
Run Code Online (Sandbox Code Playgroud)
也许我的使用set!是错误的或误用的,我仍然会得到错误.有没有一种优雅的方法来破坏性地修改Clojure中的参数?
我正在研究这个程序,使用swing.每次导出程序并运行它时,我都会尝试设置的GUI.JFrame可以,但不是内部组件.提前谢谢〜艾利斯
码:
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Login {
public static void login_Interface(){
//Start GUI style//
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
} catch (UnsupportedLookAndFeelException e1) {
e1.printStackTrace();
}
// End //
JFrame login_Frame = new JFrame("Login - LetsMeet");
login_Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
login_Frame.setSize(750, 650);
login_Frame.setResizable(true);
JPanel panel_Title = new JPanel(); //PANEL Title …Run Code Online (Sandbox Code Playgroud) 我正在学习C语言,并且正在尝试构建一个简单的解释器.它需要一个字符和一个数字.以下程序仅'r'用于char.的'r'代表的范围内(自然数),并在数字后它指定的范围内的长度.
示例执行:
Enter:
r 9
0 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)
会发生什么:
Enter:
r 9
Run Code Online (Sandbox Code Playgroud)
程序崩溃了.所以我认为错误在于打印数组.
有问题的代码在这里:
#include <stdio.h>
#include <stdlib.h>
int* range(int i) {
int *a=(int*) malloc(i * sizeof(int));
int j;
for(j=0;j<i;j++)
a[j]=j;
return a;
}
void printArray(int a[], int length) {
int i;
printf("\n");
for(i=0;i<length;i++)
printf("%d ", a[i]);
}
int main() {
char c;
int n = 1;
while(n>=0){
printf("\nEnter:\n\t");
scanf("%c %d", c, n);
if(c='r')
printArray(range(n), n);
}
return 0;
} …Run Code Online (Sandbox Code Playgroud)