在SAS中,是否可以将%let语句引用到位于数据库中的值?
例如,my n in的值%let n=50取决于我的一个数据库中计算的某个值,例如,第一行加第一列.由于该值在我的循环中被修改了100次,我不想手动输入该值.
此函数应该计算元素"a"出现在列表中但不起作用的次数:
(defun iter-a_count (lst)
(let ((count 0))
(dolist (x lst)
(if (equal x 'a)
(setf count (+ count 1)))
count )))
Run Code Online (Sandbox Code Playgroud)
此函数始终返回nil.请问我哪里出错了?
好吧,我可能做错了,但它让我把头发拉了出来.我找不到任何可以做我想要的东西
拿这个伪代码
my_function left right
= another_function new_left new_right (fourth_function new_left new_right)
where new_left = if some_condition then left else third_function left
new_right = if some_condition then third_function right else right
Run Code Online (Sandbox Code Playgroud)
我怎样才能避免重新检查some_condition?而且我不是在讨论some_condition作为where构造中的另一个变量保存.如果我把它lets放进去,if那么复制一下in another_function new_left new_right.
在命令式语言中,我可以做类似的事情
int new_left;
int new_right;
if (condition) {
new_left = left;
new_right = third_function(right);
} else {
new_left = third_function(left);
new_right = right;
}
return another_function(new_left, new_right, fourth_function(new_left, new_right));
Run Code Online (Sandbox Code Playgroud)
我知道在函数式语言中你不应该考虑按顺序做事,而是作为表达式的组合,所以我只是想找一种方法来编写原始的伪代码,这样就干了.这似乎是一个简单而相对常见的案例.
编辑
对困惑感到抱歉.我无法内联,third_function left/right因为我需要使用它的值两次(更新的伪代码).并且 …
我正在阅读Swift文档,并挂断了我认为文档不一致的内容.
在if语句中,条件必须是布尔表达式 - 这意味着诸如得分{...}之类的代码是错误,而不是与零的隐式比较.
因此严格的"布尔"将为TRUE或FALSE.
您可以使用if和let一起使用可能缺少的值.这些值表示为选项.可选值包含值或包含nil以指示缺少值.在值的类型后面写一个问号(?)以将值标记为可选
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
如果可选值为nil,则条件为false
因此,通过"布尔",它们似乎意味着"truthy/falsy",因为nil隐含地意味着错误
并跳过括号中的代码.否则,将解包可选值并在let之后将其分配给常量,这使得在代码块内可用的展开值.
所以这里是我看到不一致的地方.在上面的代码示例中,由于optionalName具有值,因此该name变量被赋值为"John Appleseed".
因此,在比较中,我们最终得到了非布尔的表达 ; 特别是,"John Appleseed." 这是"真实的",但不是布尔值,这与第1点相矛盾!
换句话说 - 在代码中 - 在let中赋值后,我们有:
if "John Appleseed" {
greeting = "Hello, \(name)"
} …Run Code Online (Sandbox Code Playgroud) 我需要测试一个文件是否包含特定的单词列表。
所以我在描述块中使用 let :
let (:test_rb_structure) { %w(nom, description, prix, rdv, validation, heure, creation) }
Run Code Online (Sandbox Code Playgroud)
我在同一个 describe bloc 中这样称呼它:
describe 'in app/controllers/api/v1/comptes.rb' do
subject { file('app/controllers/api/v1/comptes.rb') }
it { is_expected.to exist }
# Test structure is respected
test_rb_structure.each do |structure|
it { is_expected.to contain(structure) }
end
end
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
undefined local variable or method `test_rb_structure'
Run Code Online (Sandbox Code Playgroud)
怎么了 ?我想不通。
当我在循环中使用时,它可以工作,并且对于循环只是没有得到任何东西:(这是我的代码
'use strict'
var match_table = [
{'project': 'Laveral', 'template': 'Blade'},
{'project': 'Ember.js', 'template': 'Handlebars'},
{'project': 'Meteor', 'template': 'Handlebars'},
];
// count project number by template
var templateMap = new Array();
match_table.forEach(function(listItem){
var template = listItem['template'];
if (!templateMap[template]) {
templateMap[template] = new Object();
}
templateMap[template]['name'] = template;
if (templateMap[template]['count']) {
templateMap[template]['count']++;
} else {
templateMap[template]['count'] = 1;
}
});
//console.log(templateMap);
// for loop fails
for (let value of templateMap) {
console.log(value);
}
templateMap.forEach(function(item) {
console.log(item);
})
Run Code Online (Sandbox Code Playgroud)
也forEach不输出任何东西〜?!
我想更新一个字段中的更改记录语法,所以我做了类似的事情:
let rec = rec{field = 1}
Run Code Online (Sandbox Code Playgroud)
但我注意到我不能再打印rec了,这意味着当我尝试时编译器似乎进入无限循环.所以我尝试过:
let a = 1 -- prints OK
let a = a -- now i can't print a (also stuck in a loop)
Run Code Online (Sandbox Code Playgroud)
所以我不能let a = a用任何类型,但我不明白为什么,我应该如何解决这个问题.
顺便说一句:在做的时候:
let b = a {...record changes..}
let a = b
Run Code Online (Sandbox Code Playgroud)
有效,但似乎多余.
我无法理解let在我发现的示例中的这种用法。我正在使用鸡肉计划。
(let loop ()
(print "hello world")
(loop)
)
Run Code Online (Sandbox Code Playgroud)
这是一个简单的无限循环,它递归地调用自己,我无法理解的是语法。我知道第一个参数必须是一个成对列表,((<var[1]> <value[1]>)...(<var[n]> <value[n]))其他参数是 let 的主体。那么,为什么这个片段有效呢?
为什么var APP = APP || {};工作正常,但const APP = APP || {};不是?或者let APP = APP || {}就此而言.
Uncaught ReferenceError: APP is not defined
Run Code Online (Sandbox Code Playgroud)
因为这只与APP的评估有关,而不是与它的设定有关.
如标题所示,我想在do块之后返回一个值。
示例:编写一个将变量插入到数组中给定位置的函数:
insertAt :: a -> Int -> [a] -> [a]
insertAt x n xs = do
let before = take n xs
let after = drop n xs
let merged = before ++ [x] ++ after
in merged
Run Code Online (Sandbox Code Playgroud)
例如:
insertAt'x'3“ Aleander” =>“ Alexander”
无论如何,当使用单个let调用时,可以使用in关键字返回一个值,但是在示例中多次调用let会得到错误:
错误:解析输入“ in”中的错误
我知道我可以在一个let用法中完成全部操作,但是我想知道如何处理多个let调用:)
谢谢您的帮助!
let ×10
haskell ×3
javascript ×2
loops ×2
conditional ×1
ecmascript-6 ×1
for-loop ×1
if-statement ×1
iteration ×1
lisp ×1
named ×1
optional ×1
rspec ×1
ruby ×1
sas ×1
scheme ×1
swift ×1
var ×1
where-clause ×1
xcode6 ×1